题意:求k进制的N位数有多少个。高精度。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define N 1000
int temp[N+1],ans[2*N][N+1];
void add(int a[],int b[],int res[])
{
int i;
for(i=N;i>=0;i--)
{
res[i]=a[i]+b[i];
}
for(i=N;i>=0;i--)
{
res[i-1]+=res[i]/100;//有多种不同进制,取两位
res[i]=res[i]%100;
}
}
void mul(int a[],int k,int res[])
{
int i;
for(i=N;i>=0;i--)
{
res[i]=a[i]*k;
}
for(i=N;i>=0;i--)
{
res[i-1]+=res[i]/100;
res[i]=res[i]%100;
}
}
void print(int res[])
{
int i=0;
while(res[i]==0) i++;
printf("%d",res[i++]);
for(;i<=N;i++)
{
if(res[i]>9) printf("%d",res[i]);//按所给进制格式输出
else printf("0%d",res[i]);
}
printf("\n");
}
int main()
{
int n,m,i,j,k,a,b;
while(scanf("%d%d",&n,&k)!=EOF)
{
memset(ans,0,sizeof(ans));
ans[0][N]=k-1;ans[1][N]=k*(k-1);
for(i=2;i<n;i++)
{
memset(temp,0,sizeof(temp));
add(ans[i-1],ans[i-2],temp);
mul(temp,k-1,ans[i]);
}
print(ans[n-1]);
}
return 0;
}