UVA 424-Integer Inquiry
题目大意:大位数加法
解题思路:用字符数组装数,然后倒过来加
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
void add(char *a,char *b) {
char c[1000];
char d[1000];
memset(c, '\0', sizeof(c));
memset(d, '\0', sizeof(d));
for(int i = strlen(a) - 1; i >= 0; i--) {
int j = strlen(a) - i - 1;
c[j] = a[i];
}
for(int i = strlen(b) - 1; i >= 0; i--) {
int j = strlen(b) - i - 1;
d[j] = b[i];
}
strcpy(a,c);
strcpy(b,d);
int max;
int x = strlen(a);
int y = strlen(b);
int m = 0;
if(x > y)
max = x;
else
max = y;
for(int i = 0; i < max; i++) {
if(a[i] == '\0')
a[i] = a[i] + '0';
if(b[i] == '\0')
b[i] = b[i] + '0';
int s = b[i] - '0' + a[i] - '0' + m;
m = s / 10;
int r = s - m * 10;
b[i] = '0' + r;
}
if(m != 0)
b[max] = '0' + m;
for(int i = strlen(b) - 1; i >= 0; i--) {
int j = strlen(b) - i - 1;
d[j] = b[i];
}
strcpy(b,d);
}
int main() {
char a[1000][1000];
int n = 0;
memset(a, '\0', sizeof(a));
while(scanf("%s", a[n]) && a[n][0] != '0') {
n++;
}
for(int i = 1; i < n; i++) {
add(a[i-1], a[i]);
}
printf("%s\n",a[n-1]);
return 0;
}