C 加分题目
用C实现一个函数 int gcd(int a, int b) 求解两个整数的最大公约数,算法步骤是,用a ,b中的大值减去小值得到临时值c,然后再用c和a,b中的最小值进行计算,直到c和a,b中的最小值相等。一个例子参考附件。
提交代码和运行截图。
#include <stdio.h>
int gcd(int x, int y)
{
int sum1 = 1;
//先判断 x y是否都是偶数
while ((x % 2 == 0) && (y % 2 == 0))
{
sum1 *= 2;
x = x / 2;
y = y / 2;
}
while (1)
{
//保证,被减数大于减数,不然就交换顺序
if (x < y)
{
int temp = x;
x = y;
y = temp;
}
//差放在s中
int s = x - y;
//判断差 和 减数 是否相等,如果是,跳出循环。
if (y == s)
break;
else
{
x = y;
y = s;
}
}
//最大公约数就是约掉的若干个2的积与第二步中等数(减数=差)的乘积
return y * sum1;
}
int main()
{
int a = 98;
int b = 63;
int gcdnum = gcd(a, b);
printf("%d %d的最大公约数为 %d\n", a, b, gcdnum);
return 0;
}