51Nod 1005 大数加法
来源:互联网 发布:单片机与modbus 编辑:程序博客网 时间:2024/06/06 07:27
1005大数加法
基准时间限制:1 秒 空间限制:131072 KB 分值:0难度:基础题
收藏
关注
取消关注
给出2个大整数A,B,计算A+B的结果。
Input
第1行:大数A第2行:大数B(A,B的长度 <= 10000 需注意:A B有可能为负数)
Output
输出A + B
Input示例
68932147586468711654886
Output示例
537643802472
这题不好做就是在负数上,要处理负数。例如 13 -14有可能就会计算成-99
我的做法是不看符号,把数大的放在前面统一处理,加法简单,减法注意符号
#include<iostream>#include<algorithm>#include<map>#include<cstring>#include<vector>#include<cmath>using namespace std;int main(){char s1[100001],s2[100001];scanf("%s %s",s1,s2);int a[100001]={0},b[100001]={0},n=0,m=0;int fz1=0,fz2=0;if(s1[0]=='0'&&s2[0]=='0'){cout<<0;return 0;}char fz_s1[100001],fz_s2[100001];for(int i=0;i<strlen(s1);i++){if(s1[i]=='-'||s1[i]=='+') continue;fz_s1[n++]=s1[i];}fz_s1[n]='\0';for(int i=0;i<strlen(s2);i++){if(s2[i]=='-'||s2[i]=='+') continue;fz_s2[m++]=s2[i];}fz_s2[m]='\0';if(strlen(fz_s1)<strlen(fz_s2)){swap(s1,s2);}else if(strlen(fz_s1)==strlen(fz_s2)) {if(strcmp(fz_s1,fz_s2)<0) swap(s1,s2);}if(s1[0]=='+'||s1[0]=='-') fz1=1;if(s2[0]=='+'||s2[0]=='-') fz2=1;n=0,m=0;for(int i=0;i<strlen(s1);i++){if(s1[i]=='+'||s1[i]=='-') continue;if(fz1) a[n++]=s1[strlen(s1)-i]-'0';else a[n++]=s1[strlen(s1)-i-1]-'0';} for(int i=0;i<strlen(s2);i++){if(s2[i]=='+'||s2[i]=='-') continue;if(fz2)b[m++]=s2[strlen(s2)-i]-'0';else b[m++]=s2[strlen(s2)-i-1]-'0';}if((s1[0]=='-'&&s2[0]=='-')){int c[100001]={0};int fz=0;for(int i=0;i<max(n,m);i++){fz=a[i]+b[i]+fz;c[i]=fz%10;fz/=10;}if(fz!=0) c[max(n,m)]=fz;int j=max(n,m)+10;while(c[j--]==0);j++;cout<<'-';for(;j>=0;j--){cout<<c[j];}}else if(s1[0]!='-'&&s2[0]!='-'){int c[100001]={0};int fz=0;for(int i=0;i<max(n,m);i++){fz=a[i]+b[i]+fz;c[i]=fz%10;fz/=10;}if(fz!=0) c[max(n,m)]=fz;int j=max(n,m)+10;while(c[j--]==0);j++;for(;j>=0;j--){cout<<c[j];}}else if(s1[0]!='-'&&s2[0]=='-'){int i;for( i=0;i<max(n,m);i++){if(a[i]-b[i]>=0) a[i]=a[i]-b[i];else a[i]=a[i]+10-b[i],a[i+1]--;}int j=max(n,m)+1;int flag=1;while(j){if(a[j]==0){j--;continue;}else break;}for(;j>=0;j--) cout<<a[j]; }else if(s1[0]=='-'&&s2[0]!='-'){int i;cout<<'-';for( i=0;i<max(n,m);i++){if(a[i]-b[i]>=0) a[i]=a[i]-b[i];else a[i]=a[i]+10-b[i],a[i+1]--;}int j=max(n,m)+1;int flag=1;while(j){if(a[j]==0){j--;continue;}else break;}for(;j>=0;j--) cout<<a[j]; }return 0;}
阅读全文
0 0
- 51nod-1005 大数加法
- 51nod 1005《《大数加法》》
- 51nod 1005 大数加法
- 51nod 1005 大数加法
- 51nod 1005 大数加法
- 51nod 1005 大数加法
- 51nod 1005 大数加法
- 【51nod】1005 大数加法
- 51Nod 1005 大数加法
- 51Nod--1005 大数加法
- 51Nod 1005 大数加法
- 51nod 1005 大数加法
- 51nod 1005 大数加法
- 51Nod-1005-大数加法
- 51Nod-1005-大数加法
- 51Nod 1005 大数加法
- 51Nod 1005 大数加法
- 51nod 1005 大数加法 大数运算
- 动态规划/leetcode/直接推导递推公式
- spring 基本依赖
- luogu1125【2008提高】笨小猴(素数)
- 《机器学习》阅读心得——十、降维与度量学习
- Java垃圾回收机制(3)- GC算法
- 51Nod 1005 大数加法
- Android语音用户引导:播放assets中的音频资源
- STL(十九)queue队列容器
- 索引
- IO和NIO的比较
- poj2417大步小步法
- Spark task not serializable错误的分析和处理
- CTreeCtrl获取根节点
- C++输入获取未知长度的行输入数组 与 输出控制