两个大数(包括负数)相加
来源:互联网 发布:vb中dim是什么意思 编辑:程序博客网 时间:2024/06/05 15:33
分析:
当这两个大数为正数时,我们可以将字符转化为数字相加,再加进位talg,有进位为1,否则为0;
两个为负数则与正数相似,为一正一负时,我们可以将它们转化为两个正数,用大的减去小的,然后在根据较大的数为正或负,为正时,则结果为正,否则为负。
代码如下:
<span style="font-size:18px;">#include<iostream>#include<string>#include<algorithm>using namespace std;</span>
<span style="font-size:18px;">//两个正数相加</span><span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif;">,isPositive是结果的正负</span><span style="font-size:18px;">string addPositiveNum(string num1,string num2,bool isPositive){ int i=num1.size()-1; int j=num2.size()-1; int talg=0; int sum; char pt; string str=""; while(i>=0&&j>=0) { sum=num1[i]-'0'+(num2[j]-'0')+talg; if(sum>9) { talg=1; sum=sum%10; } else { talg=0; } str.append(1,sum+'0'); i--; j--; } while(i>=0) { if(talg>0) { sum=num1[i]-'0'+talg; if(sum>9) { talg=1; sum=sum%10; } else { talg=0; } str.append(1,sum+'0'); i--; } else { str.append(1,num1[i]); i--; } } while(j>=0) { if(talg>0) { sum=num2[j]-'0'+talg; if(sum>9) { talg=1; sum=sum%10; } else { talg=0; } str.append(1,sum+'0'); j--; } else { str.append(1,num2[j]); j--; } } if(talg>0) { str.append(1,'1'); } if(!isPositive) { str.append(1,'-'); } reverse(str.begin(),str.end()); return str;}</span>
<span style="font-size:18px;">//两个正数相减</span><span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif;">,isPositive是结果的正负</span><span style="font-size:18px;">string minusPositiveNum(string num1,string num2,bool isPositive){ int i=num1.size()-1; int j=num2.size()-1; string str; if(i<j||(i==j&&num1.compare(num2)<0)) { str=num2; num2=num1; num1=str; } int talg=0; int sum; str=""; while(i>=0&&j>=0) { sum=num1[i]-'0'-(num2[j]-'0')+talg; if(sum<0) { talg=-1; sum=sum+10; } else { talg=0; } str.append(1,sum+'0'); i--; j--; } while(i>=0) { if(talg<0) { sum=num1[i]-'0'+talg; if(sum<0) { talg=-1; sum=10+sum; } else { talg=0; } str.append(1,sum+'0'); i--; } else { str.append(1,num1[i]); i--; } } while(j>=0) { if(talg<0) { sum=num2[j]-'0'+talg; if(sum<0) { talg=-1; sum=10+sum; } else { talg=0; } str.append(1,sum+'0'); j--; } else { str.append(1,num2[j]); j--; } } if(!isPositive) { str.append(1,'-'); } reverse(str.begin(),str.end()); return str;}string add(string num1,string num2){ if(num1.size()<=0||num2.size()<=0) return ""; bool isPositive=true; string result; if(num1[0]=='-'&&num2[0]=='-') {</span>
<span style="font-size:18px;"> //为两个负数相加,去掉‘-’号 result=addPositiveNum(num1.substr(1,num1.size()-1),num2.substr(1,num2.size()-1),false); } else if(num1[0]!='-'&&num2[0]!='-') {</span>
<span style="font-size:18px;"> //为两个正数相加, result=addPositiveNum(num1,num2,true); } else {</span>
<span style="font-size:18px;"> //为一正一负 string str1; string str2;</span>
<span style="font-size:18px;"> //去掉其中的‘-’号 if(num1[0]=='-') { str1=num1.substr(1,num1.size()-1); str2=num2; } else { str1=num1; str2=num2.substr(1,num2.size()-1); }</span>
<span style="font-size:18px;"> //判断结果的正负 int t=str1.size()-str2.size(); if(t==0) { int t1=str1.compare(str2); if(t1<0) t=-1; else if(t1>0) t=1; }</span>
<span style="font-size:18px;"> //两个数相等 if(t==0) { return "0"; }</span>
<span style="font-size:18px;"> //两个正数相减 if(num1[0]=='-') { if(t<0) { result=minusPositiveNum(str1,str2,true); } else { result=minusPositiveNum(str1,str2,false); } } else { if(t<0) { result=minusPositiveNum(str1,str2,false); } else { result=minusPositiveNum(str1,str2,true); } } } return result;}int main(){ cout<<add("45430543","-10")<<endl; return 0;}</span>
0 0
- 两个大数(包括负数)相加
- 大数整数相加(忽略负数)
- 大数相加,两个大数。
- 两个大数(整数)相加模板
- 两个大数相加
- 两个整型大数相加
- 实现两个大数相加
- 两个大数相加
- 两个大数相加问题
- 实现两个大数相加!
- 两个大数相加
- 两个大数相加
- 两个大数相加
- COJ 1328 大数乘法(包括负数的)
- 两个用大数相加(转化为字符串再相加)
- leetcode_415(两个数字字符串相加,模拟大数相加)
- 两个大数相加 C语言
- 栈实现两个大数相加
- Android中,字体大小自适应不同分辨率,以及注意事项
- mapreduce操作hbase多个输入表
- region的拆分策略
- Hbase的简单原理
- Hbase基本概念
- 两个大数(包括负数)相加
- linux设备驱动之字符设备
- codeforces665e Beautiful Subarrays(trie)
- Chrome浏览器快捷键大全
- 百度2017年暑假实习生编程题目(第三题)---3、进程调度算法 短作业优先(SJF, Shortest Job First)又称为“短进程优先
- Milking Cows(USACO)
- 如何系统学习数据分析?
- android开发环境安装-Eclipse篇
- 手机访问 电脑虚拟机的服务器