高精加法:
#include <iostream>
#include <string>
using namespace std;
string str,str1,str2;//str:结果,str1&str2:两个加数
int main(void){
cin>>str1>>str2;
int n=(str1.length()>str2.length()?str1.length():str2.length());//int不会爆
if(str1.length()>str2.length()){
for(;str1.length()>str2.length();){
str2.insert(0,"0");
}
}else if(str1.length()<str2.length()){
for(;str1.length()<str2.length();){
str1.insert(0,"0");
}
}
for(int i=n-1;i>=0;){
if((str1[i]-'0')+(str2[i]-'0')<10){
char a[2]={(str1[i]-'0')+(str2[i]-'0')+'0'};
string str3=a;
str.insert(0,str3);
i--;
}else{
char a[2]={((str1[i]-'0')+(str2[i]-'0'))%10+'0'};
string str3=a;
str.insert(0,str3);
if(i==0&&(str1[i]-'0')+(str2[i]-'0')+1>=10) str.insert(0,"1");
i--;
for(;i>=0;i--){
if((str1[i]-'0')+(str2[i]-'0')+1<10){
char a[2]={((str1[i]-'0')+(str2[i]-'0'))+1+'0'};
string str3=a;
str.insert(0,str3);
i--;
break;
}else{
char a[2]={(((str1[i]-'0')+(str2[i]-'0'))+1)%10+'0'};
string str3=a;
str.insert(0,str3);
}
if(i==0&&(str1[i]-'0')+(str2[i]-'0')+1>=10) str.insert(0,"1");
}
}
}
cout<<str;
}
高精减法:
#include <iostream>
#include <string>
using namespace std;
string str,str1,str2;//str:结果,str1:被减数,str2:减数
bool f=false;//结果是不是负数
void swap(string &str,string &str1){//重新写的swap函数
string str2=str;
str=str1;
str1=str2;
f=true;
}
int main(void){
cin>>str1>>str2;
if(str1.length()<str2.length()) for(;str1.length()<str2.length();) str1.insert(0,"0");
else for(;str1.length()>str2.length();) str2.insert(0,"0");
if(str1<str2) swap(str1,str2);
if(str1.length()>str2.length()) for(;str2.length()!=str1.length();) str2.insert(0,"0");
for(int i=