如下所示,,这样输入13,为什么结果是-1839957479呢,输入12会得到522956313,输入比13小的数都得到了正数
#include<stdio.h>
int main(){
int i,n;
int a = 1;
int c = 0;
scanf("%d",&n);
for(i =1;i <= n;i++)
{
a = a*i;
c = c+a;
}
printf("%d",c);
return 0;
}
int类型4个字节,最大2,147,483,647,超过就是负数,
int64_t类型最大9223372036854775807,需要#include <stdint.h>
再大用double或者自己写大数乘法
原因
数值溢出范围会导致出现负数的情况;
至于为什么13出现负数,可能是因为刚好超出位数,导致向符号位进位,符号位受到影响,因此导致整个数值异常;学过计算机组成原理后能更好理解它的原因。
解决方法:
可以先去查看一下各个数据类型的范围,更换更大的范围的数据类型;