用C语言计算2的1至100次方
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C语言计算2的1至100次方相关的知识,希望对你有一定的参考价值。
然后用数组储存结果。
#include <stdio.h>
main()
int i,j;
doule a[100];
a[0]=2;
for(i=1;i<100;i++)
a[i]=a[i-1]*2;
for(j=0;j<100;j++)
printf("a[%d]=%d",j,a[j]);
但是结果就全部为0了。 如果改成INT类型的话,完全不够范围。 烦请指教下~
两处错误:
doule 拼写错误
printf输出浮点数时, 应该用%f, 而不是%d
修改过程如下:
修改后代码如下:
#include <stdio.h>
main()
int i,j;
double a[100];
a[0]=2;
for(i=1;i<100;i++)
a[i]=a[i-1]*2;
for(j=0;j<100;j++)
printf("a[%d]=%f\\n",j,a[j]);
修改后运行结果如下:
a[0]=2.000000
a[1]=4.000000
a[2]=8.000000
a[3]=16.000000
a[4]=32.000000
a[5]=64.000000
a[6]=128.000000
a[7]=256.000000
a[8]=512.000000
a[9]=1024.000000
a[10]=2048.000000
a[11]=4096.000000
a[12]=8192.000000
a[13]=16384.000000
a[14]=32768.000000
a[15]=65536.000000
a[16]=131072.000000
a[17]=262144.000000
a[18]=524288.000000
a[19]=1048576.000000
a[20]=2097152.000000
a[21]=4194304.000000
a[22]=8388608.000000
a[23]=16777216.000000
a[24]=33554432.000000
a[25]=67108864.000000
a[26]=134217728.000000
a[27]=268435456.000000
a[28]=536870912.000000
a[29]=1073741824.000000
a[30]=2147483648.000000
a[31]=4294967296.000000
a[32]=8589934592.000000
a[33]=17179869184.000000
a[34]=34359738368.000000
a[35]=68719476736.000000
a[36]=137438953472.000000
a[37]=274877906944.000000
a[38]=549755813888.000000
a[39]=1099511627776.000000
a[40]=2199023255552.000000
a[41]=4398046511104.000000
a[42]=8796093022208.000000
a[43]=17592186044416.000000
a[44]=35184372088832.000000
a[45]=70368744177664.000000
a[46]=140737488355328.000000
a[47]=281474976710656.000000
a[48]=562949953421312.000000
a[49]=1125899906842624.000000
a[50]=2251799813685248.000000
a[51]=4503599627370496.000000
a[52]=9007199254740992.000000
a[53]=18014398509481984.000000
a[54]=36028797018963968.000000
a[55]=72057594037927936.000000
a[56]=144115188075855872.000000
a[57]=288230376151711744.000000
a[58]=576460752303423488.000000
a[59]=1152921504606846976.000000
a[60]=2305843009213693952.000000
a[61]=4611686018427387904.000000
a[62]=9223372036854775808.000000
a[63]=18446744073709551616.000000
a[64]=36893488147419103232.000000
a[65]=73786976294838206464.000000
a[66]=147573952589676412928.000000
a[67]=295147905179352825856.000000
a[68]=590295810358705651712.000000
a[69]=1180591620717411303424.000000
a[70]=2361183241434822606848.000000
a[71]=4722366482869645213696.000000
a[72]=9444732965739290427392.000000
a[73]=18889465931478580854784.000000
a[74]=37778931862957161709568.000000
a[75]=75557863725914323419136.000000
a[76]=151115727451828646838272.000000
a[77]=302231454903657293676544.000000
a[78]=604462909807314587353088.000000
a[79]=1208925819614629174706176.000000
a[80]=2417851639229258349412352.000000
a[81]=4835703278458516698824704.000000
a[82]=9671406556917033397649408.000000
a[83]=19342813113834066795298816.000000
a[84]=38685626227668133590597632.000000
a[85]=77371252455336267181195264.000000
a[86]=154742504910672534362390528.000000
a[87]=309485009821345068724781056.000000
a[88]=618970019642690137449562112.000000
a[89]=1237940039285380274899124224.000000
a[90]=2475880078570760549798248448.000000
a[91]=4951760157141521099596496896.000000
a[92]=9903520314283042199192993792.000000
a[93]=19807040628566084398385987584.000000
a[94]=39614081257132168796771975168.000000
a[95]=79228162514264337593543950336.000000
a[96]=158456325028528675187087900672.000000
a[97]=316912650057057350374175801344.000000
a[98]=633825300114114700748351602688.000000
a[99]=1267650600228229401496703205376.000000
参考技术A 用大整数乘法,C语言写起来比较麻烦,好像也有现成的函数,网上去找找本回答被提问者和网友采纳 参考技术B 可能是数据较大溢出了 参考技术C 用无符号长整形试试:unsigned long int计算1!+2!+3!...+(n-1)!+n!。设计求解该问题的C语言程序,阶乘的计算使用递归函数实现
程序运行后输入n,当n=5时输出结果如下图所示
用递归并不是很好,每次递归调用都要有一定的时间和空间的开销,当n不大时还可以,当n大到一定程度就会出现堆栈溢出,程序崩溃。作为练习或是算法描述是可以的。
该问题如果不用递归算法实现阶乘可以做的更有效率。
递归算法:
#include<iostream>
using namespace std;
long int fun(int n)
if(n==1)return 1;
return ((long int)n)*fun(n-1);
int main()
long int S=0;
int n;
cout<<"请输入一个正整数"<<endl;
cin>>n;
for(int =1;i<=n;i++)
S+=fun(i);
cout<<"S="<<S<<endl;
非递归算法
#include <iostream>
using namespace std;
int main()
long int S;
long int T=1;
int n;
cout<<"请输入一个正整数"<<endl;
cin>>n;
for(int i=1;i<=n;i++)
T=(long int)i*T;
S=S+T;
cout<<"S="<<S<<endl;
参考技术A #include <stdio.h>
#include <stdlib.h>
fun(int x);
int main(void)
char *pszBuff = NULL;
int a;
int i=1;
int sumResult = 0;
printf("input a int number::");
scanf("%d", &a);
for(i=1;i<=a;i++)
int tmp = fun(i);
sumResult = sumResult + tmp ;
printf("%d!=%d, 1-%d的阶乘的和为%d\n",i,tmp,sumResult );
return 0;
int fun(int x)
int ret;
if(x == 1) return 1;
ret = fun(x-1)*x;
return ret;
本回答被提问者采纳 参考技术B #include<stdio.h>
void main()
int n,i,j;
long num=1,sum=0;
printf("input a int number::");
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
num*=j;
sum+=num;
printf("%d!=%d, 1-%d的阶乘的和为%d\n",i,num,i,sum);
num=1;
sum=0;
参考技术C #include <stdio.h>
int jiecheng(int x)
int sum=1;
int i;
for(i=1;i<=x;i++)
sum=sum*i;
return sum;
main()
int n,i,j,sum=0;
printf("求阶乘\n");
printf("请输入一个数N:N<10\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
printf("%d!的阶乘为%d ",i,jiecheng(i));
for(j=1;j<=i;j++)
sum=sum+jiecheng(j);
printf(" 1-%d!的阶乘和为%d\n",i,sum);
sum=0;
以上是关于用C语言计算2的1至100次方的主要内容,如果未能解决你的问题,请参考以下文章
C语言中编程计算1至100以内的奇数和偶数并分别求和,求代码