很简单的C语言程序问题(关于最小公倍数)
答案:4 信息版本:手机版
解决时间 2019-10-07 00:44
已解决
2019-10-06 06:29
#include "stdio.h"
有错,输入789 321,会显示642。789、321的最小公倍数不是642,明显不对啊?但是程序找不到错。有谁能帮忙看一下,谢谢。
main()
{int a,b,t,i,k;
printf("Please Input a,b:\n");
scanf("%d %d",&a,&b);
if(a>b){t=a;a=b;b=t;}
for(i=1;i<=a;i++)
if(b*i%a==0){k=b*i;break;}
printf("%d\n",k);}
这个我知道理由了,分留给第一个说对答案的人。
最佳答案
2019-10-06 08:07
b*i会发生数据溢出
所以只要改成 long int 就可以了
main()
{long int a,b,t,i,k;
printf("Please Input a,b:\n");
scanf("%ld %ld",&a,&b);
if(a>b){t=a;a=b;b=t;}
for(i=1;i<=a;i++)
if(b*i%a==0){k=b*i;break;}
printf("%ld\n",k);
}
全部回答
1楼
2019-10-06 10:16
scanf语句中 别用空格啊!因为那样的话 读取时 必须加空格
得细心啊
2楼
2019-10-06 09:32
楼主 你的逻辑上错误了。while(r) 这一段在第一次被执行后 你再输入数字就不执行了。因为r的值改变了。
一下是我按照你的算法编的程序,虽然很复杂 ,但是是根据你的方法和思路来的。
#include
void main ()
{
int m,n,r,s,temp,min;
while(scanf("%d%d",&m,&n)!=eof)
{
s=m*n;
if (m
{
temp=m;
m=n;
n=temp;
}
if(m%n!=0)
{
loop:
r=m%n;
m=n;
n=r;
if(r!=0)
{
goto loop;
}
else
min=s/m;
;
}
else
min=m;
printf("%d\n",min);
}
}
3楼
2019-10-06 09:19
显示的是84423阿.
你是不是输入a,b的时候加了一个逗号阿
我要举报
如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
大家都在看
推荐资讯