c - 反转两个数字并获得总和的倒数

标签 c debugging

作为最后的手段,我来到 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 指出负数的错误。

我不知道您必须如何确切地处理负数,但这是一种可能的解决方案:

  1. 计算前k :

    bool isNegative = n < 0; n = abs(n);

  2. 现在您的 n由于 abs() 是正的返回绝对值。以同样的方式继续。

  3. for 之后循环让我们看看是否 n是负面的并改变count因此:

    if (isNegative) { count = -count; } return count;

注意:使用此解决方案,我们将数字本身反转并保持符号不变。

关于c - 反转两个数字并获得总和的倒数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41957967/

相关文章:

为 postgreSQL 创建扩展

c++ - 如何解释 IDA Pro 生成的这些代码?

c - "x"类型的参数与 x 类型的参数不兼容

c++ - Qt Creator 调试器中 vector 成员的值是多少?

c - 如何将保存矩阵固定到链表中

c - 当文件内容读入c中的数组时,会打印额外的字符

error-handling - 如何在 Pharo 中复制和粘贴错误消息?

c# - 在 Debug模式下跳过 While 循环

c# - VSX:在运行时以编程方式禁用断点

javascript - 调试 React 时找出谁在渲染组件