進位問題沒考慮好,WA一次。
9999 + 0001 = 0000。
/* ACM 10013 Super long sums
* mythnc
* 2011/11/23 14:17:30
* run time: 1.200
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXD 1000001
void bigsum(int *, int);
void print(int *, int);
int main(void)
{
int set, i, m;
int *sum;
sum = (int *)malloc(sizeof(int) * MAXD);
scanf("%d", &set);
for (i = 0; i < set; i++) {
/* init */
memset(sum, 0, MAXD * sizeof(int));
scanf("%d", &m);
bigsum(sum, m);
print(sum, m - 1);
if (i < set - 1)
putchar('\n');
}
free(sum);
return 0;
}
/* bigsum: scan two number x, y, then do x + y */
void bigsum(int *sum, int m)
{
int i, x, y;
for (i = m - 1; i > - 1; i--) {
scanf("%d %d", &x, &y);
sum[i] += x + y;
}
/* carry */
for (i = 0; i < m; i++)
if (sum[i] > 9) {
sum[i + 1] += sum[i] / 10;
sum[i] %= 10;
}
}
/* print: print out sum */
void print(int *sum, int m)
{
for (; m > -1; m--)
printf("%d", sum[m]);
putchar('\n');
}
沒有留言:
張貼留言