【9112】求2的n次方的精确值

来源:互联网 发布:教师网络研修计划 编辑:程序博客网 时间:2024/06/05 09:27

Time Limit: 1 second
Memory Limit: 2 MB

问题描述求2^n的精确值。n由用户输入,0<=n<=3232。     

Input

输入只有一行,一个正整数n。

Output

输出为计算的结果, 最后用回车结束。

Sample Input

  8

Sample Output

  256(换行)【题解】

这是个单精度乘高精度的问题,每次在做乘方的时候,把当前算出的结果的每一位都乘上2就可以了,注意要倒序来做。然后用一个变量x来处理进位的问题。最后逆序输出就可以了。

【代码】

#include <cstdio>int n,a[1000],l = 1;void input_data(){    scanf("%d",&n);    for (int i = 1;i <= 999;i++) //一开始每个位置上的数都置0        a[i] = 0;}void get_ans(){    a[1] = 1;    for (int i = 1;i <= n;i++) //要乘n次        {            int x= 0;            for (int j = 1;j <= l;j++) //每一位的数都要乘上2 然后处理进位的问题 用一个x就能搞定                {                    a[j] = (a[j]*2) + x;                    x = a[j] / 10;                    a[j] = a[j] % 10;                }            while ( x > 0) //如果x 还大于0 就说明2^n的结果的长度还能更长。                {                    a[++l] += x;                    x = a[l] / 10;                    a[l] = a[l] % 10;                }        }}void output_ans(){    for (int i = l;i >= 1;i--)        printf("%d",a[i]);}int main(){    input_data();    get_ans();    output_ans();    return 0;}


 

0 0