大数相加(A+B)
这是一道很简单基础的面试题,大数相加转换成字符串处理即可
获取A,B的长度
字符串反序
进位处理
字符串反向
char *reverse_str(char *a) {
if(a == NULL)
return NULL;
int len = strlen(a);
char *left = a;
char *right = a + len - 1;
while(left < right) {
*left ^= *right;
*right ^= *left;
*left ^= *right;
if(left == (right - 1)) {
break;
}
left++;
right--;
}
return a;
}
相加处理
char* add(char *a, char *b) {
int len = strlen(a);
int len_b = strlen(b);
char ans[100];
memset(ans, 0, sizeof(ans));
len > len_b ? len : len_b;
reverse_str(a);
reverse_str(b);
int i = 0, ret = 0, flag = 0;
int tmp;
while(i < len && flag == 0) {
if(a[i] < '0' || a[i] > '9') {
flag = 1;
break;
} else if(b[i] < '0' || b[i] > '9') {
flag = 2;
break;
}
tmp = (a[i] - '0') + (b[i] - '0') + ret;
ans[i] += (tmp % 10) + '0';
ret = tmp / 10;
i++;
}
if(flag == 1) {
for(i; i < len; i++) {
tmp = (b[i] - '0') + ret;
ans[i] += (tmp % 10) + '0';
ret = tmp / 10;
}
} else if(flag == 2) {
for(i; i < len; i++) {
tmp = (a[i] - '0') + ret;
ans[i] += (tmp % 10) + '0';
ret = tmp / 10;
}
}
if(ret != 0)
ans[i] = ret + '0';
reverse_str(ans);
cout << ans;
}
主函数
int main() {
char a[100];
char b[100];
cin >> a;
cin >> b;
add(a, b);
return 0;
}