c语言数据太大就算不出来,定义为long型数据但是到32768就运算错误,为什么?
解决时间 2021-04-13 20:58
- 提问者网友:临风不自傲
- 2021-04-13 01:50
输入任意整数,调用函数sum(int n),完成对该整数n各位数字的求和
#include
long sum(long x)
{if(x<10) return(x);
else
return(sum(x/10)+x%10);
}
void main()
{long x,y=0;
scanf("%d",&x);
y=sum(x);
printf("sum=%d\n",y);
}
最佳答案
- 五星知识达人网友:撞了怀
- 2020-11-02 07:04
输出的%d 的范围是32767 你改成%ld 就可以了 ok
全部回答
- 1楼网友:西风乍起
- 2019-08-27 00:06
调用函数sum(int n),你这个long型作为参数传过来以后,又被转换成int型的变量n了,肯定出错啊
你应该把函数定义成调用函数sum(long n),
- 2楼网友:低音帝王
- 2021-02-24 09:51
楼主完全不用管二进制的。
printf("%d",i) %d是输出十进制,而long i=32768,32768本来就是十进制了,直接输出就可以了。
具体解答一下楼主下面的疑问
1、32768的二进制不是1000 0000 0000 0000。long i=32768,使用的是long类型存放,long类型占用4个字节,所以32768不止这么长,前面还有一堆0了。
0000 0000 0000 0000 1000 0000 0000 0000
这才是32768的二进制表示方法,最高位是0,并不是1。
如果定义成short i =32768的话,输出就是-32768了。
2、用%d输出是按照i的类型来输出,i占用4个字节,就使用4个字节输出。输出全部0000 0000 0000 0001 0000 0000 0000 0011,既不是0000 0000 0000 0001,也不是0000 0000 0000 0011。
我要举报
大家都在看
推荐资讯