openjudge 1.6.12 计算2的N次方

OpenJudge - 12:计算2的N次方


解题思路:

1.Long long最高表示2的63次的整数,此题n最大为100,所以存放不下,需要用到高精度乘法,并且用数组来模拟

2.首先判断n最大为100,依照十进制数的规律,数组不需要开多大100即可,int a[105];用来存放积

3.如果n为0的话,直接输出1即可,如果n大于0,则开始累乘,所以可以设置数字a[1]=1,用a[1]去乘 2,乘法不同的是,数组中的每一位都要去乘2,并且加上前一位的进位,所以要对每一位进行进位处理,并且在进行完一轮乘2后,如果最高位上还是大于等于10的,那么扩充数组长度+1,这一位上存储进位,继续下一轮,下一轮开始之前进位归零,因为最低位上是不加进位的,相当于加的就是0;

4.利用打标记的方法去除前导0 ,从最高位输出结果


#include
using namespace std;
int a[105];
int main()
{int n,k=1;cin>>n;a[1]=1;//数组初始化为1 for(int i=1;i<=n;i++){int jin=0;//每一轮的进位初始化为0,因为最低位是没有进位的,所以第一位总是加的0 for(int j=1;j<=k;j++){a[j]=a[j]*2+jin;//分别对每一位上的数组元素值都乘2,并且加上前一位的进位 jin=a[j]/10;//进位等于本位上的除以10的商 a[j]=a[j]%10;//本位上对10取模 }if(jin>0)//因为之前对数组的每一位都进行进位处理了 进位最大就是1 {k++;//扩充数组 a[k]=1;//在最高位上放1 }}bool flag=0;for(int i=105;i>=1;i--)//去除前导0 {if(a[i]!=0)flag=1;if(flag==1)cout<


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部