[BAEKJOON]NO.110プラスサイクル


https://www.acmicpc.net/problem/1110

問題は簡単そうで、すぐに符号化に入りたいのですが、
これらの数字だけを遊ぶ問題はかえって混同されやすい.
自分の言語で変換する仕事だと思って計画を立てた.
計画の作成

上のように大体書いて、それからコードを始めます.
今回は上の計画ほど完璧ではありませんが、私はやはり問題を正確に理解することができます.
計画を立てるのに役立つ.
#include <iostream>
using namespace std;

int GetFirstDigit(int num)
{
    return num / 10;
}

int GetSecondDigit(int num)
{
    return num % 10;
}

int MakeNewNumber(int n1, int n2)
{
    return (n1 * 10) + n2;
}

int main(void)
{
    int input = 0, sum = 0;
    int newNumber = -1;
    int cycle = 0;

    cin>>input;
    int target = input;
    
    while(newNumber != target)
    {
        sum = GetFirstDigit(input) + GetSecondDigit(input);
        newNumber = MakeNewNumber(GetSecondDigit(input), GetSecondDigit(sum));
        input = newNumber;
        cycle++;
    }    
    cout<<cycle<<endl;
}

  • コードと計画の違いは
    アルゴリズムを実行するためにnewnumberとsumのほかにinputとtargetという変数も使用した.
    理由はwhile文の条件のためです.
    最初はnewnumberとinputが違うと繰り返してもらいました.
    newNumberでビット数を取得するには、inputの値をnewNumberに入れる必要があります.
    それは同じで、繰り返しが終わりました.

  • もう一つのポイントはnewnumberを-1に初期化することです.
    テストケースに0を入れる場合は、1が必要です.
    なぜなら、newnumberの初期値が0の場合、targetも0になり、繰り返して終了しないからである.
  • 本のコードでは、関数の名前が簡潔で、内容も1行で終わるので、いい感じです.