用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以内的奇数和偶数并分别求和,求代码

编程计算 S=1+2+4+8、、、、、、、、、 (100项) 用汇编或C语言 选啥数据类型呀?

如何用C语言求1至100所有素数的和?

c语言中while的用法

用python程序求2的0次方到63次方

如何用C语言实现2的n次方