c语言连long int 装不下怎么办?
解决时间 2021-01-31 23:49
- 提问者网友:心牵心
- 2021-01-31 00:42
代码如下,到输入13时就不对了,应该是差范围了,才学没多久不知道该怎么办?
(计算1!+2!+3!+。。。。+N!)
#include
void main()
{
long int i=0,n,x=1,y=1,z=1;
while(1)
{scanf("%d",&n);
if(n<=20)
{
for(i=1;z<=n;i++,z++)
{
i=x*z;
if(i>1)
{
y=i+y;
}
x=i ;
}
if(n==1)
printf("1\n");
else
printf("%d\n",y);
}}
}
最佳答案
- 五星知识达人网友:玩家
- 2021-01-31 01:50
long int实际上跟int一样,也只有4个字节。
解决办法是用long long。
修改三个地方:
long int i=0,n,x=1,y=1,z=1;
修改为long long i=0,n,x=1,y=1,z=1;
scanf("%d",&n);修改为scanf("%lld",&n);
printf("%d\n",y);修改为printf("%lld\n",y);
注意这里的ll是jkl里的小写l。
我用的是Linux上的CodeBlocks,如果是Windows,把%lld换成%I64d,注意前面的字母是HIJK里的大写I。
全部回答
- 1楼网友:街头电车
- 2021-01-31 03:44
c语言的已有的简单类型中没有一个放得下的。
如果你想计算,就需要自己想办法,例如 用一个大数组来存储计算结果的每一位等等,你可以网上搜搜,我也没有具体实现,只在网上看到过
- 2楼网友:空山清雨
- 2021-01-31 02:36
- -
楼上正解。。
用数组 int a[1000]={0}
每一个数组元素装一位数,话说我做大整数加法时就是这样处理的
char c
int i=0, a[100]={0}// 假设是100位的数,想节省空间的话也可以用shor 反正只装一位数
char c;
while((c=getchar())!='\')
{
a[i]=c-'0'; //将字符转变成数字 数字字符减字符零等于该字符所代表的整数值
i++;
}
i--; // 输入回车后 a[i] 不再输入 但 i 的值比数组实际装的数据长度长1
其实用字符数组也可以, 原理都差不多- -!
不过用字符数组装的话 在计算时将字符转化为数字,然后再转化为字符存储,而整数数组的话是输入时将字符转化为数字;
非负整数数字字符与对应的整数的转化
非负整数+字符零=整数字符
整数的值要求在零到九之间
我要举报
大家都在看
推荐资讯