【发布时间】:2022-01-02 22:40:54
【问题描述】:
我试图在hackerrank 上解决这个问题。但我遇到了一些问题。具体问题是:
例如:
- 9875 的数字总和将计算为:
sum(9875) = 9+8+7+5 = 29。
sum(29) = 11。
sum(11) = 2.(使用递归函数)。
- 在我的测试用例中,(n ='9875', k=4) 数字 p 是通过串联字符串 nk 次创建的,因此初始 p = 9875987598759875 (字符串 '9875' 重复 4 次)。
但是当我编写这个测试用例时,它不起作用。这是我的源代码:
int SuperDigit(long n){
long sum =0;
if(n==0) return 0;
else{
return sum= sum +(n%10 + SuperDigit(n/10));
}
if(sum>10){
return (sum%10 + SuperDigit(sum/10));
}
}
int main(){
string n;cin>>n;
int T;cin>>T;
string repeat;
for(int i=0; i <T;i++){
repeat += n;
}
cout<<repeat;
long x=0;
stringstream geek(repeat);
geek>>x;
long sum = SuperDigit(x);
printf("\n%ld ",sum);
for(int i=0;i<10;i++){
if(sum>=10){
sum = SuperDigit(sum);
}
else{
break;
}
}
printf("\n%ld ",sum);
}
如果我尝试:n = '123' 和 k =3(预期输出:9)
我的输出是正确的,这是我的这个测试用例的输出:
123 3
123123123
18
9
但是当我尝试 n = '9875' 和 k = 4 时(预期输出:8)
我的输出将是错误的:
9875 4
9875987598759875
46
1
正如您在这个测试用例中看到的,所有数字的第一个总和必须是 116。但我的只显示 46.
谁能帮我解释一下?非常感谢!
【问题讨论】:
-
你是对的。所以最后一部分是所有无法访问的代码,什么都不做。
if(sum>10){ return (sum%10 + SuperDigit(sum/10)); } -
您是否已经使用调试器来查看您的代码实际在做什么?
-
请注意,您不需要创建这么大的数字,它可能会溢出。
-
提示:
SumOfDigits(SumOfDigits(123) * 3) == SumOfDigits(123123123)(或者应该是)。 -
谁能帮我解释一下? -- 你得先把精力放到debugging your own code.。学习如何调试自己的程序是学习编程的一部分。否则,它会变成编写代码的情况,看到它不起作用,然后你就坐下来,而 StackOverflow 上的其他人调试你的代码——它不会那样工作。