文章
6
粉丝
137
获赞
2
访问
5.8k
#include<stdio.h>
#include<string.h>
#include<stdbool.h>
#include<stdlib.h>
#include<math.h>
#define N 100010
int main()
{
int a, b;
char s1[N], s2[N]; //用来存放将整数转换为字符的数组
int i = 0, j = 0;
int len1, len2; //用来记录整数的位数
int inva, invb; //用来存放反转后的数据
int min = 0; //记录反转后更小的数(便于计算最大公约数)
scanf("%d%d", &a, &b);
//将整数转换为字符存放在数组中,此时刚好是反转后的数字,可以利于拼接
while(a > 0)
{
s1[i++] = a % 10 + '0';
a /= 10;
}
len1 = i; //记录长度
while(b > 0)
{
s2[j++] = b % 10 + '0';
b /= 10;
}
len2 = j;
inva = atoi(s1); //将字符数组转换为整数
invb = atoi(s2);
min = inva < invb ? inva : invb; //记录更小的那个数
//逆序开始计算最大公约数
for(i = min; i >= 1; i--)
{
//碰到公约数,因为是逆序的,所以碰到的第一个就是最大的
if(inva % i == 0 && invb % i == 0)
{
printf("%d\n", i);
break;
}
}
return 0;
}
登录后发布评论
暂无评论,来抢沙发