问题是使用递归添加给定数字的数字,为此我编写了以下代码:
#include <stdio.h>
#include <math.h>
int addition(signed int x);
int main() {
signed int num;
printf("enter the number : ");
scanf("%d", &num);
printf("%d", addition(num));
return 0;
}
int addition(signed int x) {
signed int sum;
sum = x % 10;
x = x / 10;
if (log10(x) + 1 == 1) {
sum = sum + x;
} else {
sum = sum + addition(x);
}
return(sum);
}
此代码有效,但是奇怪的问题是,它只添加了以1开头的数字。我不明白发生了什么,为什么会这样。如果有人可以解释,那将真的很有帮助。
ps:我是C语言的初学者,所以请容忍并忍受我。
谢谢。
答案 0 :(得分:0)
当您达到else
条件时,您将无限递归,因为您正在使用addition(x)
值为0进行x
,而 not 不会更改参数
您真的不需要log10
[并且测试可能是错误的。]
这是一个经过清理的工作版本:
#include <stdio.h>
#include <math.h>
int addition(int x);
int
main()
{
int num;
printf("enter the number : ");
scanf("%d", &num);
printf("%d\n", addition(num));
return 0;
}
int
addition(int x)
{
int sum;
sum = x % 10;
x /= 10;
if (x != 0)
sum += addition(x);
return sum;
}