c语言的一个很简单的问题

来源:百度知道 编辑:UC知道 时间:2024/06/25 05:46:49
main()
{
int a,b,c,d;
scanf("%d %d",&a,&b);
c=a*b;
d=a%b;
printf("c=%d d=%d",c,d);
getch();
}
题目是要用SCANF输入 1500 和350
可是我一编程老是错误
但是少一位比如
150 35 又可以求告诉告诉下 在线等
1楼的大哥.......不行啊 你QQ多少 能加下你不...
.................................................................
我在电脑上网你说我在不爱实践啊=.=
理论上是没有问题 但问题结果就不是啊

int是8位的吧,1500*350超过范围了,数据类型换成long int

不是说过了嘛?

main()
{
int a,b,d; long c;
scanf("%d %d",&a,&b);
c=a*b;
d=a%b;
printf("c=%ld d=%d",c,d);
getch();
}
就可以了,因为1500*350的结果太大了,超出了int的范围,所以应定义成long,而long在输出时的格式为%ld

是结果不行么?我在公司上班,不能上QQ的,应该对的呀,如果不对,那我也没有办法了,不好意思

#include <stdio.h>
void mian(void)
{
int a,b,d;
long c;
scanf("%d %d",&a,&b);
c=(long)(a*b);
d=a%b;
printf("c=%d d=%d",c,d);
}

计算结果确实是溢出了,因为a跟b都是int型的,所以计算结果还是int型的,要必须强制转换成long型才能赋值给c。。。。这样改了之后应该是行的。。。你也可以把a跟b转换成long型之后再进行计算。。。
c = (long)a * (long)b;

int 是2个字节 16位 最大为 65535
而 1500*350 大于 65535 溢出

你这样写数不能太大,所以有错误,把它改成下面的就可以了
#include<stdio.h>
main()
{
long int a,b,c,d;
scanf("%d %d",&a,&b);
c=a*b;
d=a%b;
printf("c=%ld,d=%ld\n",c,d);
}