计算2的n次幂

在计算2的n次幂的时候,咱们能够采用pow这个函数,可是当数据太大的时候显然int double 等这些数据类型并不能保存下来,就会出现问题,这个时候能够采起数组存储的方式。算法

1.使用pow函数。数组

pow(x,y)为计算x的y次幂。函数

如:pow(2,3)为计算2的3次幂。code

2.使用数组存储。索引

核心算法是:咱们把数组的每个元素看做数字的每一位。如:a[3]={1,2,3},咱们就看做123这个数字。string

因此咱们须要让这个数组里面全部的数都乘以2,而后会出现进位的问题,咱们就让a[j]/10求出来这一位超过10的部分,给加到他的下一位上。如a[j]=13,a[j+1]=2,这时a[j]>9的,咱们知道数字的每一位(除首位外)都是0~9的,这时就须要进位,让a[j]变成3,进一位让a[j+1]变成3,咱们a[j]%10取出来1,加到a[j+1]上,这样a[j+1]就变成了3,而后a[j]%10使a[j]变成3,这样就能完成进位工做了。io

输出的时候,由于咱们并不知道咱们求出来的数字究竟有多少位,而且输出也须要从高位进行输出,因此须要处理前面几位是0的存在,注意到当乘法结束的时候j是数组最大的索引,因此咱们这个时候就使用j这个变量了。一直处理到数组里面的元素再也不是0,咱们就开始输出。for循环

固然这个代码只能实现长度不超过10000的长度,当须要超过这个,能够考虑加大数组长度,并相应改变for循环的范围。class

#include <stdio.h>
#include <string.h>
int a[10000];
int main()
{
    int n,i,j;
    scanf("%d",&n);
	memset(a,0,sizeof(a));
	a[0]=1;
    for(i = 0;i < n;i++)
    {
        for(j = 0;j < 10000;j++)
            a[j] *= 2;
        for(j = 0;j < 9999;j++)
        {
            a[j+1] += a[j] / 10;
            a[j] %= 10;
        }
    }
    while(!a[j])j--;
    for(;j >= 0;j--)
        printf("%d",a[j]);
    return 0;
}