作为最后的手段,我来到 SO。过去 2 小时一直在尝试调试此代码。如果问题适合其他 SE 站点,请在投反对票之前告诉我。
这里是:
#include <stdio.h>
#include<math.h>
int reverse(int n) {
int count = 0, r, i;
int k = (int)log(n * 1.0);
for(i = k; i >= 0; i--)
{
r = (n % 10);
n = (n / 10);
count = count + (r * pow(10, k));
}
return count;
}
int main(void) {
int t;
scanf("%d", &t);
while(t--)
{
int m, n, res;
scanf("%d %d", &m, &n);
res = reverse(m) + reverse(n);
printf("%d", reverse(res));
}
return 0;
}
我的目标是获取 2 个数字作为输入,将它们取反,将取反的数字相加,然后将结果也取反。我必须对“t”个测试用例执行此操作。
问题:http://www.spoj.com/problems/ADDREV/
任何问题,如果代码不清楚,请在评论中问我。 谢谢。
编辑: 程序编译成功。 我每次都得到一个模糊的输出。 假设作为输入的 2 个数字是 24 和 1,我得到的输出是 699998。 如果我尝试 21 和 1,我会得到 399998。
最佳答案
好的,如果您正确地调试了您的代码,您会注意到 k
的奇怪值.这是因为你使用 log
哪个
Computes the natural (base e) logarithm of arg.
(取自链接引用,强调我的)。
因此,当您尝试获取数字的“长度”时,您应该使用 log10
或这样的转换(查看 wiki about change of base for logarithms ): log(x)/log(10)
等于 log10(x)
现在让我们看这里:pow(10, k)
<-- 你总是计算 10^k 但你需要 10^i,所以它应该是 pow(10, i)
相反。
编辑 1:感谢@DavidBowling 指出负数的错误。
我不知道您必须如何确切地处理负数,但这是一种可能的解决方案:
计算前
k
:bool isNegative = n < 0; n = abs(n);
现在您的
n
由于abs()
是正的返回绝对值。以同样的方式继续。在
for
之后循环让我们看看是否n
是负面的并改变count
因此:if (isNegative) { count = -count; } return count;
注意:使用此解决方案,我们将数字本身反转并保持符号不变。
关于c - 反转两个数字并获得总和的倒数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41957967/