永发信息网

c语言数据太大就算不出来,定义为long型数据但是到32768就运算错误,为什么?

答案:3  悬赏:50  手机版
解决时间 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。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯