首页 > 解决方案 > 计算最大公约数的C程序给出错误答案

问题描述

我编写了以下程序,该程序从命令行获取两个数字并返回这些数字的 gcd。

#include <stdio.h>

int to_int(char *input)
{
        return *input - '0';
}

int main(int argc, char *argv[])
{
        if (argc < 2) return 1;
        int a = to_int(argv[1]);
        int b = to_int(argv[2]);
        int i;
        int result;
        for (i = 1; i <= a && i <= b; i++) {
                if (a%i==0 && b%i==0) {
                        result = i;
                }
        }
        printf("%d\n", result);
        return 0;
}

但是,当我给它数字 4 和 16 时,它会返回答案 1。这是不正确的。4 和 16 的 gcd 是 4。但是我找不到我的代码有什么问题。我在互联网上找到的其他示例似乎使用了我正在使用的相同算法(测试两个数字是否可以被 i 整除,如果它们是则 gcd 为 i)。

有人可以指出我的代码中的错误吗?

标签: cmodulusgreatest-common-divisor

解决方案


你的to_int功能没有按照你的想法做。

该表达式*input - '0'取 in 的第一个字符input的字符代码并减去 的字符代码'0'所以结果是给定字符串的第一个字符对应的数字,而不是整个字符串。

您需要在循环中执行此操作,将结果乘以 10,然后再添加下一位的值。


推荐阅读