使用逢十进一思想计算大数相加
#include <stdio.h>
#include <string.h>
#define SIZE 1024 //must smaller than 32768
#define max(a, b) ((a > b)?a:b)
#define cton(x) (x?(x - '0'):0)
#define ntoc(x) (x + '0')
typedef unsigned short usrt;
char numa[SIZE];
char numb[SIZE];
char numans[SIZE];
#define pntnum() for(short l = strlen(ans) - 1; l >= 0; l--) putchar(ans[l])
char *addnum(char *a, char *b){
char store = 0;
short j = 0;
short la = strlen(a);
short lb = strlen(b);
if(la > lb){
strcpy(numans, b);
memset(b, 0, lb);
strcpy(b + la - lb, numans);
}
else if(la < lb){
strcpy(numans, a);
memset(a, 0, la);
strcpy(a + lb - la, numans);
}
//memset(numans, 0, sizeof(numans));
for(short i = max(la, lb) - 1; i >= 0; i--, j++){
store = cton(a[i]) + cton(b[i]) + store;
numans[j] = ntoc(store % 10);
store /= 10;
}
while(store > 0){
numans[j++] = ntoc(store % 10);
store /= 10;
}
numans[j] = 0;
return numans;
}
int main(int argc, char **argv){
strcpy(numa, argv[1]);
strcpy(numb, argv[2]);
addnum(numa, numb);
pntnum();
return 0;
}