说明:

这道题提交了三次才过,真是一波三折,题目刚拿到手有一点小懵逼,毕竟已经多年没算过公因数这些了,稍加回忆草稿上胡乱划了几下,开始写代码了。

完事后在我的DEVC++中浅试一番完美通过,然后自信满满的直接提交,没成想直接来了个0分。

回过头再看题目,我(国粹)!这次是空格输出啊,我回车了,再来!!

结果又是0???

这次我小慌了一下,不是吧这么简单的题都已经拿不下了吗?

回去DEVC++再次浅试,报错了!

报了个program recieved signal sigfpe arithmetic exception。

这时候当然要百度一下,说是浮点错误一般是程序某处整数除以0,我灵机一动原来是我的公因数没有处理好。

修改之后自信满满的去提交,又是0分!

这时候DEVC++已经不报错了,但是提交却是0分,我就去线上运行试了试,还真试出问题了。

输入5 7,公因数直接0,公倍数根本就没有输出。

测试了一番,发现问题出在for循环了,循环的退出条件i没有给初值,加了个i=1就通过了(虽然俺也不知道为啥),有大佬知道的话,烦请相告,感谢感谢!!

解题思路:
1.使用for循环计算最大公因数

2.根据短除法的原理计算最小公倍数

注意事项:
1.输出格式!!输出格式啊!

2.涉及到除法时,一定要保证不能出现整数除以0的情况!

参考代码:

#include<stdio.h>

int main(void){
	
	int factor;
	int multiple;
	int m,n;
	scanf("%d%d",&m,&n);
	
	if(m>n){
		factor = n;
	}else{
		factor = m;
	}
	
	for(int i=1;i>0;factor--){
		if(m%factor==0&&n%factor==0){
			i = 0;
			printf("%d",factor);
		}
	}
	
	/*
	因为执行完if后;
	先执行更新语句factor--;
	再进行i值的判断;
	最后退出循环;
	此时factor的值比公因数小了1,所以要factor++
	*/
	factor++;
	
	multiple = factor * (m/factor) * (n/factor);
	printf(" %d",multiple);
		
	return 0;
}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

菜蛙 2年前 回复TA
上述代码是可用的哈~