高精模板
有没有人能帮我看看是不是正确的 我自己看不出来
#include<iostream>
#include<string>
using namespace std;
//no need a>b return 1 a<b return -1 a=b return0
int bidaxiao(string a, string b){
int z1=0,z2=0;while(a[z1]=='0')z1++;while(b[z2]=='0')z2++;
a.erase(0,z1);b.erase(0,z2);
if(a.length()>b.length())return 1;
if(a.length()<b.length())return -1;
for(int i=0;i<a.length();i++)if(a[i]-'0'<b[i]-'0')return -1;else if(a[i]-'0'>b[i]-'0')return 1;
return 0;
}
//no need
string jiafa(string a,string b){
string str;
int len1=a.length();
int len2=b.length();
if(len1<len2)for(int i=1;i<=len2-len1;i++)a="0"+a;
else for(int i=1;i<=len1-len2;i++)b="0"+b;
len1=a.length();
int cf=0;
int temp;
for(int i=len1-1;i>=0;i--){
temp=a[i]-'0'+b[i]-'0'+cf;
cf=temp/10;
temp%=10;
str=char(temp+'0')+str;
}
if(cf!=0)str=char(cf+'0')+str;
return str;
}
//need jiafa
string chengfa(string a,string b){
string sum[10]{"0","","","","","","","","",""},ans="0";
for(int i=1;i<10;i++)sum[i]=jiafa(sum[i-1],a);
for(int i=0;i<b.length();i++){
string c=sum[b[i]-'0'];
for(int j=0;j<b.length()-i-1;j++)c+="0";
ans=jiafa(ans,c);
}
return ans;
}
//no need
string jianfa(string a,string b) {
if(bidaxiao(a,b)==-1)return "math error";
string ans;int lena=a.length(),lenb=b.length();
int tuiwei=0,yujian=0;
if(lena>lenb)while(b.length()!=lena)b="0"+b;
if(lena<lenb)while(a.length()!=lenb)a="0"+a;
for(int i=max(lena,lenb)-1;i>-1;i--){
yujian=(a[i]-'0')-(b[i]-'0')-tuiwei;
if(yujian<0)yujian=yujian+10,tuiwei=1;
else tuiwei=0;
ans=to_string(yujian)+ans;
}
string str = "";int i=0;
for(i;i<ans.length()-1;i++)if(ans[i] != '0')break;
for(i;i<ans.length();i++)str=str+ans[i];
return str;
}
//need bidaxiao jiafa jianfa chengfa ac=保留小数位(舍去)
string chufa(string a,string b,int ac){
if(bidaxiao(b,"0")==0)return "math error";
string bt[11]={"0","","","","","","","","","",""},s="",ans="";
for(int i=0;i<ac;i++)a+="0";
for(int i=1;i<11;i++)bt[i]=jiafa(bt[i-1],b);
for(int i=0;i<a.length();i++){
s+=a[i];
int find;
for(int i=0;true;i++){
if(bidaxiao(bt[i],s)==1){
find=i-1;
break;
}
}
s=jianfa(s,bt[find]);
ans+=to_string(find);
}
{
ans+="6";int lenans=ans.length()-1;
for(int i=0;i<ac;i++)ans[lenans-i]=ans[lenans-i-1];
ans[lenans-ac]='.';
if(ans[ans.length()-1]=='.')ans=ans.erase(ans.length()-1,1);
while(ans[0]=='0')ans.erase(0,1);
if(ans[0]=='.')ans="0"+ans;
if(ans.length()==0)ans+="0";
}
return ans;
}
int main(){
string a,b;cin>>a>>b;
cout<<"a+b="<<jiafa(a,b);
cout<<"\na-b="<<jianfa(a,b);
cout<<"\na*b="<<chengfa(a,b);
cout<<"\na/b="<<chufa(a,b,100);
return 0;
}