龙空技术网

C++基础算法:计算2的N次方

陪儿学信息学奥赛 97

前言:

如今各位老铁们对“开2次方怎么算法”大约比较关注,同学们都想要剖析一些“开2次方怎么算法”的相关文章。那么小编同时在网摘上搜集了一些关于“开2次方怎么算法””的相关内容,希望同学们能喜欢,姐妹们快快来学习一下吧!

【题目描述】

任意给定一个正整数N(N<=100),计算2的n次方的值。

【输入】

输入一个正整数N。

【输出】

输出2的N次方的值。

【输入样例】

5
【输出样例】
32
解题思路

这个题跟基础算法-高精度除以低精度有点类似,我们可以通过循环N次乘法计算2的N次方值。我们声明一个数组a,存储每一次循环的乘法结果。循环结束,完整的答案已经存储在数组中。

参考答案

#include <iostream>using namespace std;int main(){    int N=0;    cin >> N;    //用于存储结果的数组,存放每次循环*2的结果,因为任何非0的0次幂都是1,所以设置a[0]=1    int a[100]={1};    //用于最后存储结果的长度    int len = 1;    //对数组a进行N次循环*2,模拟2的N次方计算    for(int i=1;i<=N;i++){        //上次循环是否有进位        int carry = 0;        //对上层for循环的结果进行每一位*2        for(int j=0;j<len;j++){            //计算当前位*2+进位,即当前位*2的结果,再加低位的进位            int value = a[j]*2+carry;            //取余为当前位的新的数值            a[j] = value % 10;            //获取下一位高位计算时的进位            carry = value / 10;            //如果有进位,并且高位的值为0,说明结果长度有变化(比如,当前是64,本次循环*2后,结果为128,结果长度由2位变为3位)            //此时就需要将结果长度+1,多进行一次for循环,目的是对进位位进行计算            if(carry > 0 && a[j+1] == 0){                len++;            }        }    }    //数组a大小    int size = sizeof(a)/sizeof(&a);    //去掉前导0    while(a[size-1] == 0 && size>0) {        size--;    }    //输出计算后的结果    for(int i= size-1;i>=0;i--){        cout<<a[i];    }    return 0;}

标签: #开2次方怎么算法