http://acm.nyist.net/JudgeOnline/problem.php?pid=45
#include <stdio.h> #include <memory.h> __int64 f[110];//记录 2^i*2^i所需要的方格数 int index,a[110],b=4; //f[i]=4f[i-1]+1; 划分四个区域 在中间填一个 则每个小区域为f[i-1] // 2^(i+1)*2^(i+1)= 4(2^i*2^i) void Muti() { int i,j,k; for(i=1;i<=index;i++) { a[i]=a[i]*b; //每一位都乘 4 } for(i=1;i<index;i++) { if(a[i]>=10) { a[i+1]+=a[i]/10; a[i]=a[i]%10; //处理进位 } } while(a[index]>=10) { //处理最高位进位 a[index+1]=a[index]/10; a[index]=a[index]%10; index++; // } } void Add() { int i=1,j,k; a[1]+=1; while(a[i]>=10) { a[i+1]+=a[i]/10; a[i]=a[i]%10; i++; } } int main() { int n,k,t,i; scanf("%d",&t); while(t--) { scanf("%d",&k); index=1; a[1]=1; for(i=2;i<=k;i++) { Muti(); Add(); } for(i=index;i>=1;i--) { printf("%d",a[i]); } printf("\n"); } return 0; }