您的位置:首页 > 其它

codevs3115 高精度练习之加法

2017-06-12 18:17 288 查看


3115 高精度练习之加法

 时间限制: 1 s

 空间限制: 64000 KB

 题目等级 : 黄金 Gold


题解

题目描述 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: