|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
main()
{
int a,b,temp;
void max(int a,int b);
printf("请输入两个正整数:\n");
scanf("%d,%d",&a,&b);
if (a==b)
printf("最大公约数为%d",a);
else if (a<b)
{temp=a;a=b;b=temp;
max(a,b);}
}
void max(int a,int b)
{
int i;
int x,y;
for (i=b;i>0;i--)
{
x=a%i;
y=b%i;
if (x==0||y==0)
{printf("%d",i);
break;}
}
}
代码如上,请问哪里有问题?编译正常,但结果不对
本帖最后由 风过无痕1989 于 2020-12-27 00:58 编辑
刚才试错了,不用指针也是可以的。不过通过了函数这个东西,我还是习惯于用指针,用指针保险
- // 求最大公约数 greatest common divisor
- #include<stdio.h>
- main()
- {
- int gcd(int *a, int *b); // 函数名就取三个英文单词的第一个字母好了(当然可以用其他的函数名)
- int a, b, temp; // 声明函数放前面,此条语句移下来(不是因为其他,只是习惯上这么做)
- printf("请输入两个正整数:\n");
- scanf("%d%d", &a, &b); // 除控制符外,不要添加其他的符号
- if (a == b)
- printf("最大公约数为%d", a);
- else if (a < b) // 此处已经是交换了,最大值就是 a
- {
- temp = a;
- a = b;
- b = temp;
- temp = gcd(a, b); // 使用函数要传地址,否则函数使用完了,数据也就自动消失了
- printf("greatest common divisor is %d\n", temp);
- }
- }
- int gcd(int a, int b) // 碾转相除法
- {
- int x = 1; // x 不等于0就行,确保循环能进行即可
- while (x != 0)
- {
- x = a % b; // 相数相除,取余数
- a = b; // 除数作被除数
- b = x; // 余数作除数,循环,直到 x = 0
- }
- return a;
- }
复制代码
|
|