HackerRank | Recursion - Recursive Digit Sum


質問する


https://www.hackerrank.com/challenges/recursive-digit-sum/problem?h_r=internal-search
最初に与えられた文字列をk回接続し、生成された数字が1桁になるまで各数字を加算する.SuperDigitは次のように計算されます.

問題を解く


  • 文字列が1の場合は、を返します.(終了条件)

  • 各文字列の数字にkを乗じます.

  • 文字列の長さが1になるまで、各文字列を加算してスーパー数値を求めます.
  • コード#コード#

    int superDigit(char* n, int k) {
        int len = strlen(n);
        long long int sum = 0;
        if(len==1) return *n-'0';
        else
        {
           for(int i=0; i<len; i++)
                sum += n[i]-'0';
            sum *= k;
            char *str = malloc(sizeof(char)*(len+1));
            sprintf(str, "%lld", sum);   // %d를 지정하여 정수를 문자열로 저장
            return superDigit(str, 1);
        }
    }

    結果