标签: sicily 高精度计算
题目链接: http://soj.sysu.edu.cn/1029
思路
高精度加法来递推结果,数组足够长就可以了。
代码
// Problem#: 1029
#include<stdio.h>
#include<string.h>
int main() {
int i, m, d;
long long all0[100 + 1], all1[100 + 1];
while (scanf("%d %d", &m, &d) && m) {
memset(all0, 0, sizeof(all0));
memset(all1, 0, sizeof(all1));
for (i = 1, all0[0] = 1; i <= d; i++) {
if (i + 1 - m > 0) {
all1[i] = all1[i - 1] + all1[i - m]
+ (all0[i - 1] + all0[i - m]) / 10000000000000000;
all0[i] = (all0[i - 1] + all0[i - m]) % 10000000000000000;
} else {
all0[i] = all0[i - 1] + 1;
}
}
if (all1[d]) printf("%lld%016lld\n", all1[d], all0[d]);
else printf("%lld\n", all0[d]);
}
}