题目描述 Description
给出两个正整数A和B,计算A+B的值。保证A和B的位数不超过500位。
输入描述 Input Description
读入两个用空格隔开的正整数
输出描述 Output Description
输出A-B的值
样例输入 Sample Input
3 12
样例输出 Sample Output
15
数据范围及提示 Data Size & Hint
两个正整数的位数不超过500位
实际就是对数组的处理,倒置对应位相加。最后用归并排序的思想进行处理。(注意最后要将结果倒置回来,而且要注意进位)
AC代码
#include <stdio.h>
#include <string.h>
char a[1001];
char b[1001];
char c[1001];
void swap(char target[]) {
int i;
int j;
char temp;
for(i = 0,j = strlen(target) - 1;i <= j;i++,j--) {
temp = target[i];
target[i] = target[j];
target[j] = temp;
}
}
void add(char a[],char b[]) {
int i;
for(i = 0;i < strlen(a) && i < strlen(b);i++) {
c[i] += a[i] + b[i] - '0';
if(c[i] - '0' >= 10){
c[i] = c[i] - 10;
c[i+1] = 1;
}
}
//先将对其的进行运算
if(strlen(a) == strlen(b)) {
if(c[i] == 1)
c[i]='1';
}
//长度相等,看是否进一位
if(strlen(a) > strlen(b)){
if(c[i] == 1) {//进位的话就得每位进行累加
for(;i < strlen(a);i++){
c[i] += a[i];
if(c[i] - '0' >= 10) {
c[i] = c[i] - 10;
c[i+1] = 1;
}
}
if(c[i-1] == '0')//最后一位进位
c[i] = '1';
}
else { //不进位的话就直接把数组接在后面
for(;i < strlen(a);i++)
c[i] = a[i];
}
}
if(strlen(b) > strlen(a)){
if(c[i]==1){
for(;i < strlen(b);i++){
c[i] += b[i];
if(c[i] - '0' >= 10){
c[i] = c[i] - 10;
c[i+1] = 1;
}
}
if(c[i] == 1)
c[i] = '1';
} else {
for(;i < strlen(b);i++)
c[i] = b[i];
}
}
}
int main(void) {
scanf("%s",a);
scanf("%s",b);
swap(a);
swap(b);
add(a,b);
swap(c);
printf("%s\n",c);
return 0;
}