㈠ c语言阶乘求和
#include<stdio.h>
intmain()
{
intn,sum=0,jc=1;
for(n=1;;n++)
{
jc*=n;
if(sum+jc>1000)
break;
sum+=jc;
}
printf("n=%dsum=%d ",n-1,sum);
return0;
}
㈡ c语言求阶乘累加和
题目中数据很大
于是我们有了高精度算法
思路是什么呢:
一个数组里面每一位存的是十进制数三位(也可以只存一位,但是比较慢)
也可以理解成一千进制
这样能模拟大整数的乘法、加法
#include<stdio.h>
#include<string.h>
#definemax(a,b)(a>b?a:b)
intn;
FILE*input,*output;
structbigint
{
intlen;
intnum[1100];
}fac,sum;
voidmul(intvalue){//高精度乘单精度
inti;
for(i=1;i<=fac.len;i++)
fac.num[i]=fac.num[i]*value;//每个数位乘上数
for(i=1;i<=fac.len;i++)
if(fac.num[i]>=1000){//逢千进一
fac.num[i+1]+=fac.num[i]/1000;fac.num[i]%=1000;
}
if(fac.num[fac.len+1])fac.len++;//位数可能会增加,而且最多增加1
}
voidadd()//给sum加上fac的值
{
inti;
//由于此时fac永远大于sum所以不用判断sum的长度
for(i=1;i<=fac.len;i++)
sum.num[i]+=fac.num[i];//每一位加上fac的值
for(i=1;i<=fac.len;i++)
if(sum.num[i]>=1000){//逢千进一
sum.num[i+1]++;sum.num[i]-=1000;//因为加法运算不可能往前进2
}
sum.len=fac.len;
if(sum.num[sum.len+1])sum.len++;
}
voidout()//输出
{
inti;
for(i=sum.len;i>=1;i--)
{
if(i<sum.len)//压位高精度一定要判断位数
{//因为如果不是第一位,其他要补0,因为如果这个数是1001,就会变成11
if(sum.num[i]<10)fprintf(output,"00");
elseif(sum.num[i]<100)fprintf(output,"0");
}
fprintf(output,"%d",sum.num[i]);
}
fputc(' ',output);
}
intmain(){
input=fopen("factor.in","r");
output=fopen("factor.out","w");
memset(fac.num,0,sizeoffac.num);
memset(sum.num,0,sizeofsum.num);
fscanf(input,"%d",&n);
inti;
fac.len=sum.len=1;//初始赋成1
fac.num[1]=sum.num[1]=1;
for(i=2;i<=n;i++)
{
mul(i);
add();
}
out();
fclose(input);fclose(output);
return0;
}
㈢ C语言怎么求n阶乘的和
1
思路
关键是写出求阶乘的函数
2
代码
#include<stdio.h>
//求阶乘
intfactorial(intn){
if(n==0||n==1)
return1;
else
returnn*factorial(n-1);
}
intmain(){
intn;
printf("求1!+2!+...+n!的结果
输入n的值:");
scanf("%d",&n);
intsum=0;
for(inti=1;i<=n;i++){
sum+=factorial(i);
}
printf("结果为:%d
",sum);
getchar();
getchar();
return0;
}
3
运行效果
㈣ 用c语言编程,求从1的阶乘一直加到20的阶乘。
1、首先打开C语言编辑器,新建一个c语言的文件,导入头文件并设置一个主函数:
㈤ C语言 阶乘求和
13
14的时候
已经超过long能表示的正数范围了,15的时候,超过了位数(32位)的范围了
把long
改成
long
long吧
能有8字节
㈥ c语言 使任意三个数的阶乘相加
#include<stdio.h>
void main()
{
long int jies(int a);
long int k,l,m;
printf("输入要求阶乘的三个数,用空格隔开\n");
scanf("%d%d%d",&k,&l,&m);
long int sum;
sum=jies(k)+jies(l)+jies(m);
printf("sum=%d\n",sum);
}
long int jies(int a)
{
long int j;
if(a<0)
printf("输入有误");
else if(a==1||a==0)
return 1;
else
j=a*jies(a-1);//递归算法
return j;
}
㈦ C语言中阶乘相加
#include<stdio.h>
main()
{
int a;
double b=1,c=1,d=0;
printf("\nplease input a number\n");
scanf("%d",&a);
for(;b<a;++b); /*这里的for(;b<a;++b); 分号要去掉:b<=a;
就是说你输入3的话,只有1*2,应该是1*2*3,其他没任何问题*/
{
c=c*b;
d+=c;
}
printf("\n%f",d);
}
/*这里的for(;b<a;++b); 分号要去掉:b<=a;
就是说你输入3的话,只有1*2,应该是1*2*3,其他没任何问题*/
㈧ c语言分别输出1的阶乘到 10的阶乘,并累加阶乘之和。
1、打开Visual Studio,新建一个空白页面。
㈨ 【在线等】c语言程序:对n的阶乘求和,n=1到10
分析下程序,阶乘可以用递归做,也可以用循环做,这里就放上这两种代码了。
一.递归:
#include <stdio.h>
int f(int t)
{
if (t==1)
return 1;
else
return t*f(t-1);
}
int main()
{
printf("%d ",f(10));
return 0;
}
程序分析:定义一个f函数,利用递归的特性,进行运算
10*f(9) = 10*9*f(8) …… 直到到1时返回1
得出结果:
㈩ 阶乘相加的问题C语言
main()
{
int i,sum=0;
for(i=1;i<=4;i++)
{
int temp=1;
for(int j=i;j>=1;j--)
{
temp=temp*j;
}
sum=sum+temp;
}
printf("%d",sum);
}
还可以用递归来实现的,方法很多种!具体自己找书来看吧,这些都是基础!!