64-разрядная цифра (C) [Не стесняйтесь редактировать мой английский]
Это часть моего задания, но я не знаю, почему вывод неправильный. Помогите?
/** * Create a function called digitsum that takes an long integer (64 bits) and * sums the value of each of its digits. i.e. the number 316 should sum to * 3+1+6 or 10. Return the sum as the value of the function. * Hints: * - If the number is negative, make it positive before anything else. * - n % 10 will give you the value of the first digit. * - n / 10 will shift the integer to the right one digit. * - You're done summing when n is zero. */
Пример ввода / вывода:
* ./p2 316 * num = 316, sum = 10 * ./p2 -98374534984535 * num = -98374534984535, sum = 77 */
#include <stdio.h>
#include <stdlib.h>
int digitsum(int n){ //first try using function
if (n % 10)
return digitsum == n % 10;
else if (n / 10)
return digitsum == n / 10;
else
return 0; //done summing when n is zero.
}
// Read down in the comments and do **NOT** modify main below.
int main(int argc, char **argv)
{
int64_t n;
if (argc < 2) {
printf("usage: %s <int>\n", argv[0]);
exit(1);
}
n = atoll(argv[1]);
printf("num = %ld, sum = %d\n", n, digitsum(n));
return 0;
}
Когда я использую gcc для компиляции, и он показывает только вывод "сумма равна 310" вместо "сумма равна 10"? Я новичок в программировании на C, и я все еще учусь..
2 ответа
Решение
Функция int digitsum(int n)
неправильно.
Вы должны добавить каждую цифру в цикле, как показано code
:
int digitsum(int64_t n){ //first try using function
int ret = 0;
if (n < 0)
n = -n;
while (n != 0) {
ret += n % 10;
n /= 10;
}
return ret; //done summing when n is zero.
}
Подумайте о базовом случае для рекурсии: если ваш номер равен 0, вы должны просто вернуть 0, иначе вы получите свою последнюю цифру с n % 10
а затем снова вызвать вашу функцию для обработки других цифр, кроме последней digitsum(n / 10)
:
long long digitsum(long long n) { // I assume n is non-negative
if (n == 0) return 0; // terminal case
return n % 10 + digitsum(n / 10);
}