一直落着没做的高精度。。Sicily 1029
忘记了怎么做,于是问了度娘,在一个人的空间里看一个方法然后自己也写了一下。附上网址http://bbs.youkuaiyun.com/topics/390533413 感谢作者的分享~
判断 i <= m 与否真是个好办法。况且题目规定了m 属于【1,10】。
// Copyright <lijiancheng> [2014]
// Sicily 1029
#include <iostream>
#include <string.h>
using namespace std;
int num[150][150];// num[i][j] means the number of the (i-1)th day;
void fun(int m, int d) {
num[1][1] = 1;
// for loop begin with 2 to d+1 means the first day to the dth day
for (int i = 2; i <= d+1; i++) {
// 表示一直没长大 只用每次+1就好 一直都是第一代
if (i <= m) {
num[i][1] = num[i-1][1] + 1;
if (num[i][1] >= 10) {
int v=num[i][1]/10;
num[i][1]=num[i][1]%10;
num[i][2]+=v;
}
}
// num[i] = num[i-1] + num [i-m]
else
{
int w = 0;
for (int n = 1; n < 150; n++) {
num[i][n] = num[i-1][n] + num[i-m][n] + w;
w = 0;
if (num[i][n] >= 10) {
w = num[i][n] / 10;
num[i][n] %= 10;
}
}
}
}
//输出
for (int i = 149; i >= 1; i--) {
if (num[d+1][i] != 0) {
for (int j = i; j >= 1; j--) {
cout << num[d+1][j];
}
cout << endl;
break;
}
}
}
int main() {
int m;
int d;
while(cin>>m>>d,m!=0||d!=0) {
memset(num,0,sizeof(num));
fun(m,d);
}
return 0;
}