求Sn = 1!+ 2!+ 3!+ 4!+ 5!+ … + n!之值,其中n是一个数字。
类型名称 | 字节数 | 取值范围 |
signed char | 1 | -128~+127 |
short int | 2 | -32768~+32767 |
int | 4 | -2147483648~+2147483647 |
long int | 4 | -2147483648~+2141483647 |
long long int | 8 | -9223372036854775808~+9223372036854775807 |
long int 的简写是 long 占位符是:%ld | ||
long long int的简写是 long long 占位符是:%lld |
了解上述数据类型的幅度就可以编写防溢出的阶乘求和代码;
来看例题:
#include<iostream>
using namespace std;
int main()
{
int s = 1, t = 1;
int n;
cin >> n;
for (int i = 2; i <= n; i++)
{
t = t * i; s += t;
}
cout << s;
return 0;
}
看输出结果
出现了溢出情况
改进方法如下:
#include<iostream>
using namespace std;
int main()
{
long long int s = 1;
long long int t = 1; //长整型也可以写为long long s和long long t
int n;
cin >> n;
for (int i = 2; i <= n; i++)
{
t = t * i; s = s + t;
}
cout << s;
return 0;
}