c - 计算最大公约数的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)。
有人可以指出我的代码中的错误吗?
解决方案
你的to_int
功能没有按照你的想法做。
该表达式*input - '0'
取 in 的第一个字符input
的字符代码并减去 的字符代码'0'
。所以结果是给定字符串的第一个字符对应的数字,而不是整个字符串。
您需要在循环中执行此操作,将结果乘以 10,然后再添加下一位的值。
推荐阅读
- sql - 仅在最高组上的 Sql 查询 max/min
- flutter - 发现奇怪的错误:GetX+Provider 相处得不太好
- python-3.x - 如何将 pandas DataFrame 作为 CSV 文件传递到 Django View 的上下文中?
- javascript - 使用 jQuery 编辑 innerHTML()
- mysql - sequelize-typescript 返回一个具有空字段的对象
- android - Requestlegacystorage 被忽略
- python - 如何交换熊猫数据框中的列值
- react-native - 如何选择 react-native-ffmpeg min 包
- php - PHP Laravel:Illuminate\Contracts\Container\BindingResolutionException:目标类 [App\Http\Controllers\User\UserController] 不存在
- vimdiff - 如何使用 vim 为 vimdif 选择多个文件?