菜蛙


私信TA

用户名:hu2022

访问量:16333

签 名:

明日复明日,明日何其多。我生待明日,万事成蹉跎。

等  级
排  名 546
经  验 4391
参赛次数 0
文章发表 75
年  龄 0
在职情况 学生
学  校 哈工程
专  业

  自我简介:

说明:

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

完事后在我的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 人评分

  评论区

上述代码是可用的哈~
2022-07-23 16:25:24
  • «
  • 1
  • »