时间限制: 1000 ms 内存限制: 65536 KB
提交数: 27334 通过数: 14606
任意给定一个正整数N(N<=100),计算2的n次方的值。
输入一个正整数N。
输出2的N次方的值。
5
32
因为n次方的值较大,用字符串形式存储和计算。
第一种方法:用加法的方式计算(字符串)
#include#include #include char a[205],b[205],c[205]; using namespace std; int main() {int m=0,t,n,q,r,i=0,j=0,k=0,sum; scanf("%d",&r); a[0]='1';//a中置字符1 for(q=0;q =0;i--)//从最后一个字符(即个位开始计算) {k=0;//进位置0(在i=0时,还有进位)a[i]=a[i]-'0'+b[i]-'0';if(a[i]>=10){//如果有进位a[i]=a[i]-10;a[i-1]+=1;if(i-1==-1)k=1;}//如果到了最前面,还有进位k=1a[i]+='0';//转换为字符 } if(k==1)//处理进位,移动,然后加入进位在最高位,即a[0]处 { for(t=m-1;t>=0;t--) {a[t+1]=a[t]; } a[0]='1'; a[m+1]='\0';//加入结束标志 } strcpy(b,a);//准备下次相加 } printf("%s",a); return 0; }
第二种:用乘法(整型数*2)
#include#include #include using namespace std;int a[1000010];int main() {int i,len,n;scanf("%d",&n);a[0]=1;len=1;//长度为1for(int k=1; k<=n; k++) {//从1开始到 nfor(i=0; i =10) {a[i+1]+=a[i]/10;a[i]%=10;}}while(a[len]>0) {//这个位上有数,就用除和模再计算len++;a[len]=a[len-1]/10;a[len-1]=a[len-1]%10;}}for(i=len-1; i>=0; i--)//倒着输出(后面是高位,前面是低位)printf("%d",a[i]); }