たとえば、数は 123 で、答えは 6 です。再帰のみです。
質問する
3098 次
3 に答える
4
@SamGrondahl は正しい軌道に乗っていますが、残念ながら、負の数を入力すると、予期しない結果が生じます。これは負の数でも適切に機能するはずです。
int sumdigits(int number) {
int sign = number < 0 ? -1 : 1;
number = sign * number; // abs the number
if (number < 10)
return sign * number;
else
return sign * (number % 10 + sumdigits(number / 10));
}
これは桁の合計を返し、数値が負の場合はそれを否定します。
于 2012-08-31T01:14:40.633 に答える
1
INT_MIN
の否定はに収まらない可能性があるため、正しい答えを達成するのは一見したよりも難しいint
です。投稿されたソリューションは、unsigned int
再帰中に使用するように実装を変更することで、ほとんどの場合機能します。以下はそれに代わるものです。
int sum_digits_recursively (char digits[], int i) {
if (i == 0 && digits[i] == '-') return -sum_digits_recursively(digits, 1);
if (digits[i] == '\0') return 0;
return (digits[i]-'0') + sum_digits_recursively(digits, i+1);
}
int sum_digits (int x) {
char digits[sizeof(x) * CHAR_BIT];
snprintf(digits, sizeof(digits), "%d", x);
return sum_digits_recursively(digits, 0);
}
于 2012-08-31T01:24:24.780 に答える
-1
これはあなたが望むことをするはずです:
int recurse( int number ) {
if ( abs(number) < 10 ) return number;
return number % 10 + recurse ( number / 10 );
}
于 2012-08-31T01:09:43.253 に答える