以为是分治法那个经典的例子,一看题才知道是大数
描述
在一个2k×2k(1<=k<=100)的棋盘中恰有一方格被覆盖,如图1(k=2时),现用一缺角的2×2方格(图2为其中缺右下角的一个),去覆盖2k×2k未被覆盖过的方格,求需要类似图2方格总的个数s。如k=1时,s=1;k=2时,s=5
输入
第一行m表示有m组测试数据;
每一组测试数据的第一行有一个整数数k;
输出
输出所需个数s;
样例输入
3 1 2 3
样例输出
1 5 21
#include <iostream> #include <cstring> using namespace std; int main() { int n,m,i,j,k,t,ans[101][61]; memset(ans,0,sizeof(ans)); ans[1][0]=4; for(i=2;i<101;i++) { k=0; for(j=0;j<61;j++) { t=ans[i-1][j]*4+k; ans[i][j]=t%10; k=t/10; } } for(i=1;i<101;i++) { j=60; while(0==ans[i][j]) j--; k=0; for(;j>=0;j--) { t=ans[i][j]+k*10; ans[i][j]=t/3; k=t%3; } } cin>>n; while(n--) { cin>>m; j=60; while(0==ans[m][j]) j--; while(j>=0) cout<<ans[m][j--]; cout<<endl; } return 0; }
原文地址:http://blog.csdn.net/u011694809/article/details/46344485