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; }
相关文章推荐
- code[vs] 3115 高精度练习之减法
- code[vs] 3116 高精度练习之加法
- CODEVS 3115高精度练习之减法
- Codevs 3115 高精度练习之减法
- codeVS 3115 高精度练习之减法
- codevs 3116 高精度练习之加法
- 高精度入门(减法、加法、乘法)之 CODE[VS] 3115、3116、3117
- codevs 3116 高精度练习之加法
- Code[VS] 3123 高精度练习之超大整数乘法
- CODEVS 3123 高精度练习之超大整数乘法
- codevs3115 高精度减法
- CODE【VS】3118 高精度练习之除法(大数除以大数模板)
- code[vs] 3117 高精度练习之乘法
- codevs3115 高精度减法
- codevs 3123 高精度练习之超大整数乘法
- codevs 高精度减法 3115
- codevs 高精度加法 3116
- codevs天梯 高精度加法
- codevs 3119 高精度练习之大整数开根
- 【基础练习】【二分】codevs2072 分配房间题解