前言
一般在C++程序编写过程中,我们所能一算的数其实都是有限制的,对于多位数(比如20位数或更多),利用正常的方法就无法计算出正确结果,所以大数运算还是需要研究哈
O(∩_∩)O~
验证代码
#include <iostream>
#include <string>
using namespace std;
string plus(string num1,string num2){
if(num1.size()<num2.size()){ string temp=num1;
num1=num2;
num2=temp;
}
int length1=num1.size(),length2=num2.size(),flag=0,a,b,sum;//flag是进位标记
while(length1>0){
a=num1[length1-1]-'0';
if(length2>0)
b=num2[length2-1]-'0';
else
b=0;
sum=a+b+flag;
if(sum>=10){
num1[length1-1]='0'+sum%10;
flag=1;
}else{
num1[length1-1]='0'+sum; flag=0;
}
length1--;//向高位移动1位
length2--;//向高位移动1位
}
if(1==flag)
num1="1"+num1;
return num1;
}
string sub(string num1,string num2)
{
string num11;
int k=0;
if(num1.size()<num2.size()||num1<num2){ string temp=num1;
num1=num2;
num2=temp;
k=1;
}
int length1=num1.size(),length2=num2.size(),flag=0,a,b,s;
while(length1>0)
{
a=num1[length1-1]-'0';
if(length2>0)
b=num2[length2-1]-'0';
else
b=0;
s=a-b-flag;
if(s<0){
num1[length1-1]=10+s+'0';
flag=1;
}else{
num1[length1-1]='0'+s;
flag=0;
}
length1--;//向高位移动1位
length2--;//向高位移动1位
}
//return k=0? num1:'-'+num1;
if(k==0)
return num1;
else
return '-'+num1;
}
int main()
{
string num1;
string num2;
cout<<"加法"<<endl;
cout<<"请输入第一个数:"; cin>>num1;
cout<<"请输入第二个数:"; cin>>num2;
cout<<"和是:"<<plus(num1,num2)<<endl;
cout<<"减法"<<endl;
cout<<"请输入第一个数:"; cin>>num1;
cout<<"请输入第二个数:"; cin>>num2;
cout<<"差是:"<<sub(num1,num2)<<endl;
return 0;
}