说明:
这道题提交了三次才过,真是一波三折,题目刚拿到手有一点小懵逼,毕竟已经多年没算过公因数这些了,稍加回忆草稿上胡乱划了几下,开始写代码了。
完事后在我的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语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:368 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:606 |
WU-拆分位数 (C++代码)浏览:819 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:672 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:566 |
简单的a+b (C语言代码)浏览:531 |
母牛的故事 (C语言代码)浏览:495 |
明明的随机数 (C语言代码)浏览:965 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:399 |
1224题解浏览:521 |