类型:递推+高精度
题目:同ural 1009
思路:同ural 1009
// ural 1012 K-based Numbers. Version 2
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
#define FOR(i,a,b) for(i = (a); i < (b); ++i)
#define FORD(i,a,b) for(i = (a); i > (b); --i)
#define FORE(i,a,b) for(i = (a); i <= (b); ++i)
int n, k;
int f1[185], f2[185];
void add() {
int i, s, c = 0;
FOR(i, 1, 180) {
s = f1[i] + f2[i] + c;
f1[i] = s % 10;
c = s / 10;
}
}
void muti(int k) {
int i, s, c = 0;
FOR(i, 1, 180) {
s = f1[i] * k + c;
f1[i] = s % 10;
c = s / 10;
}
}
int main() {
int i, j;
while(cin>>n>>k) {
memset(f1, 0, sizeof(f1));
memset(f2, 0, sizeof(f2));
f1[1] = k - 1;
f2[1] = (k * (k - 1)) % 10;
f2[2] = (k * (k - 1)) / 10;
if(n == 2) {
cout<<k * (k - 1)<<endl;
continue;
}
FORE(i, 3, n) {
add();
muti(k - 1);
FOR(j, 0, 180)
swap(f1[j], f2[j]);
}
FORD(i, 179, 0)
if(f2[i] != 0)
break;
FORD(j, i, 0)
cout<<f2[j];
cout<<endl;
}
return 0;
}