计算1+2+3+…+100的值
#include <stdio.h>
void main(){
int i,s=0;
for(i=1;i<=100;i++)
s=s+i;
printf("1+2+3+...+100的值为:%d\n",s); //5050
}
计算1+(1+2)+(1+2+3)…+(1+2+3+…100)的值
#include <stdio.h>
void main(){
int i,n,s1=0,s2=0;
for(i=1;i<=100;i++){ //1+(1+2)
s1=s1+i; // 1 3
s2=s2+s1;// 1 4
}
printf("1+(1+2)+(1+2+3)...+(1+2+3+...100)的值为:%d",s2); //171700
}
计算1!+2!+3!…+100! (1-100阶乘的和)
方法一:常规计算
#include <stdio.h>
void main(){
double i,n=1,s=0;
for(i=1;i<=100;i++){
n=n*i;
s=s+n;
}
printf("%g阶乘的和为:%g",i-1,s); //9.4269e+157
}
方法二:函数调用
#include <stdio.h>
double fun(double n){
double i;
double s;
s=1;
for(i=1;i<=n;i++){
s=s*i;
}
return s;
}
void main(){
double s;
double i,n;
s=0;
for(i=1;i<=100;i++){
s=s+fun(i);
}
printf("%g阶乘的和为:%g",i-1,s);
}
方法三:函数递归
#include<stdio.h>
double fun(double n){
if(n==1){
return 1;
}else{
return fun(n-1)*n;
}
}
void main(){
double n,i;
double sum=0;
//printf("请输入一个大于0的整数:");
//scanf("%f",&n);
for(i=1;i<=100;i++)
{
sum=sum+fun(i);
}
printf("%g的阶乘的和为:%g",i-1,sum);
}
你可能会好奇计算1!+2!+3!…+100! (1-100阶乘的和),为什么类型名要用double类型呢?不应该是正整数才对吗?
解析如下:
long long 取值范围:-2^63(-9.223372036548E+18) ~ 2^63 - 1(9.2233720368548E+18)
double 取值范围:-2^1024 ~ +2^1024(-1.79E+308 ~ +1.79E+308)
上述解析可知,类型名用double是因为double的范围比long long的范围更大,所以才能容下“1-100阶乘的和
”这么大数据,如果用long long会使数据溢出,结果就会出现错误。最后打印输出时,用"%g
"将多余的零省略后结果就变为了正整数。