文章

6

粉丝

137

获赞

2

访问

5.8k

头像
反转公约数 题解:
P1911 厦门大学2018年机试
发布于2023年9月16日 10:43
阅读数 593

#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;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发