高精代码求调
  • 板块学术版
  • 楼主_8008008
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/8/10 09:02
  • 上次更新2023/11/3 04:49:17
查看原帖
高精代码求调
803885
_8008008楼主2023/8/10 09:02

高精模板
有没有人能帮我看看是不是正确的 我自己看不出来

#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;
}
2023/8/10 09:02
加载中...