说明:
这道题提交了三次才过,真是一波三折,题目刚拿到手有一点小懵逼,毕竟已经多年没算过公因数这些了,稍加回忆草稿上胡乱划了几下,开始写代码了。
完事后在我的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分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复