- 论坛徽章:
- 0
|
算法考试要上机考,就练练高精度加法,题目地址:http://www.soj.me/1029
就是不知道为什么不AC~以后估计要经常问问题了,大家帮忙看看,我的代码:
- #include <stdio.h>
- #include <stdlib.h>
- #include<string.h>
- void add(char *a, char *b, char *ans)
- {
- int l = 0, i, j, k, carry, x, y, z;
- if(strlen(a)>=strlen(b))
- l = strlen(a)+2;
- else
- l = strlen(b)+2;
- char *c = malloc(l*sizeof(char));
- i = strlen(a)-1;
- j = strlen(b)-1;
- k = 0;
- carry=0;
- for(; i>=0||j>=0; i--, j--)
- {
- if(i<0)
- x='0';
- else
- x = a[i];
- if(j<0)
- y='0';
- else
- y=b[i];
- z = x-'0'+y-'0';
- if(carry)
- z += 1;
- if(z>9)
- {
- carry = 1;
- z %= 10;
- }
- else
- carry = 0;
- c[k++] = z+'0';
- }
- if(carry)
- c[k++] = '1';
- c[k]='\0';
- for(k=k-1, i=0; k>=0; k--)
- ans[i++] = c[k];
- ans[i] = '\0';
- }
- int main()
- {
- int m, d;
- while(scanf("%d %d", &m, &d)==2 && (m||d))
- {
- char f[102][100] = {"1", "1"};
- int i;
- for(i=1; i<=m; i++)
- add(f[i-1], "1", f[i]);
- for(; i<=d; i++)//f(n) = f(n-1)+f(n-m)
- add(f[i-1], f[i-m], f[i]);
- puts(f[d]);
- }
- return 0;
- }
复制代码 |
|