大数加法
2017-02-22 14:44
302 查看
题目描述
求两个不超过200位的非负整数的和。输入
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。样例输入
88888888888888888888 33333333333333333333
样例输出
122222222222222222221
思路:大数字用64位处理是肯定不可以的,应用字符数组,对每一位相加,>10的进一位。
#include <stdio.h> #include <stdlib.h> #include<string.h> char str1[1005],str2[1005]; int str[1005]; int main() { scanf("%s",str1); scanf("%s",str2); int num1=strlen(str1); int num2=strlen(str2); int i,j,ipos=0,k,mid=0; for(i=num1-1,j=num2-1;i>=0&&j>=0;i--,j--) { mid+=str1[i]-'0'+str2[j]-'0'; if(mid>=10) { str[ipos]=mid-10; mid=1; } else{ str[ipos]=mid; mid=0; } ipos++; } if(j>=0) while(j>=0) { mid+=str2[j]-'0'; if(mid>=10) { str[ipos]=mid-10; mid=1; } else{ str[ipos]=mid; mid=0; } j--; ipos++; } if(i>=0) while(i>=0) { mid+=str1[i]-'0'; if(mid>=10) { str[ipos]=mid-10; mid=1; } else{ str[ipos]=mid; mid=0; } i--; ipos++; } if(j<0&&i<0&&mid==1) str[ipos++]=1; int flag=0; for(k=ipos-1;k>=0;k--) { if(str[k]==0&&flag==0) continue; else { printf("%d",str[k]); flag=1; } } printf("\n"); return 0; }
相关文章推荐
- 大一下期末考试 : 大数存储 超长整数的加法
- Java大数模板——加法、减法、乘法、除法、开方、求余
- 大数加法乘法
- 简单的大数加法
- zoj 1828 Fibonacci Numbers(大数加法= =)
- NOJ_1011 大数加法
- C语言之大数加法
- 51Nod 1005 大数加法
- 大数加法1
- 大数加法
- POJ 1503 Integer Inquiry 【大数加法】
- 单链表实现大数加法、大数减法、大数乘法、大数指数运算
- 1024. Palindromic Number (25)【简易大数加法+回文】——PAT (Advanced Level) Practise
- PAT 甲级 1065. A+B and C (64bit) (20) 【大数加法】
- 斐波那契数列大数加法
- 大数加法
- 大数加法
- nefu 120 Lucas-Lehmer 梅森素数判别法 二分-大数乘法换加法
- 大数加法和大数乘法
- vector、string实现大数加法乘法