1170:计算2的N次方
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 27334 通过数: 14606
【题目描述】
任意给定一个正整数N(N<=100),计算2的n次方的值。
【输入】
输入一个正整数N。
【输出】
输出2的N次方的值。
【输入样例】
5
【输出样例】
32
因为n次方的值较大,用字符串形式存储和计算。
第一种方法:用加法的方式计算(字符串)
#include<iostream> #include<cmath> #include<cstring> 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<r;q++)//是0的话,不循环,从1开始循环计算 { m=strlen(a); strcpy(b,a);//a与b相等,然后它们两个相加,即乘以2了 n=strlen(b); for(i=m-1;i>=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=1 a[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<iostream> #include<cmath> #include<cstring> using namespace std; int a[1000010]; int main() { int i,len,n; scanf("%d",&n); a[0]=1; len=1;//长度为1 for(int k=1; k<=n; k++) {//从1开始到 n for(i=0; i<len; i++) {//每位*2 a[i]=a[i]*2; } for(i=0; i<len; i++) {//从0位开始,看是否大于10了,往后进位,不一定进1,所以用除和模 if(a[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]); }