HDU 5241 Friends
各种语言相互独立
故而答案是2的乘方
由样例可知是32的n次方
剩下的是一个大数乘法
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
const int N=9999;
const int DLEN=4;
class BigNum
{
private:
int a[40000];
int len;
public:
BigNum()
{
len=1;
memset(a,0,sizeof(a));
}
BigNum(const int b)
{
int c,d=b;
len=0;
memset(a,0,sizeof(a));
while(d>N)
{
c=d%(N+1);
d=d/(N+1);
a[len++]=c;
}
a[len++]=d;
}
BigNum operator*(const BigNum &T)const
{
BigNum ret;
int i,j,up;
int temp,temp1;
for(i=0; i<len; ++i)
{
up=0;
for(j=0; j<T.len; ++j)
{
temp=a[i]*T.a[j]+ret.a[i+j]+up;
if(temp>N)
{
temp1=temp%(N+1);
up=temp/(N+1);
ret.a[i+j]=temp1;
}
else
{
up=0;
ret.a[i+j]=temp;
}
}
if(up!=0)ret.a[i+j]=up;
}
ret.len=i+j;
while(ret.a[ret.len-1]==0&&ret.len>1)--ret.len;
return ret;
}
void print()
{
int i;
printf("%d",a[len-1]);
for(i=len-2; i>=0; --i)
{
printf("%.4d",a[i]);
}
printf("\n");
}
};
int main()
{
int n,T,Case=1;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
BigNum a(32),ans(1);
while(n>0)
{
if(n&1)
ans=ans*a;
if(n==0) break;
a=a*a;
n=n>>1;
}
printf("Case #%d: ",Case++);
ans.print();
}
return 0;
}