
c语言改错,输入100000 200000,输出结果为什么有一个是负数?程序及结果如下。
3个回答
展开全部
原因很简单,就是数据超界了,
ji=m*n;
m和n一个是100000,一个是200000
long int已经表示下他们的乘积ji了
因为在vc6.0中long int也是只占32 的
所以你不能以这种方式来求两个很大的数的最小公倍数
推荐你用循环的方式来做
#include "stdio.h"
int main()
{
int m,n,i,tmp;
scanf("%d%d",&m,&n);
tmp=m;
if(m<n)
tmp=n;
for(i=tmp;;i++)
{
if(i%m==0 && i%n==0)
//找到两个数中较大的数开始的第一个能整除m,n的数,就是最小公倍数
{
printf("%d和%d的最小公倍数为%d\n",m,n,i);
break;
}
}
}
追问
怎么改?
追答
来循环来做
#include "stdio.h"
int main()
{
int m,n,i,tmp;
scanf("%d%d",&m,&n);
tmp=m;
if(tmp<n)
tmp=n;//tmp存m,n其中较大的数
for(i=tmp;;i++)
{
if(i%m==0 && i%n==0)
//从m,n中较大的数开始的第一个能整除m,n的数肯定就是最小公倍数
{
printf("%d和%d的最小公倍数为:%d\n",m,n,i);
break;
}
}
tmp=m;
if(tmp>n)
tmp=n;
for(i=tmp;i>0;i--)
{
if(m%i==0 && n%i==0)
{
printf("%d和%d的最大公约数为:%d\n",m,n,i);
break;
}
}
}
展开全部
ji=1000000*200000=2*10^10,数据溢出,存的时候变成负数,
所以bei=ji/n 为负数
所以bei=ji/n 为负数
更多追问追答
追问
怎么改?
追答
一种是直接加大范围
用__int64 a;
scanf("%I64d", &a);用64位的整数做。
或者是用处理大数的方法做
用字符数组存大数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |