问题标题: 高精度计算器(原创)来了!!!

0
0
已解决
王梓轩
王梓轩
资深光能
资深光能

之前确实有SL工作室抄袭行为,已改正,然后...

不说了,上代码!!!

#include<bits/stdc++.h>
using namespace std;
string gjdjia(string a,string b)
{
	string gjdjian(string,string);
	bool bijiao(string,string);
    string c="";
	int flag=0;
	if(a[0]=='-'&&b[0]=='-')flag=1,a.erase(0,1),b.erase(0,1);
	if(b[0]=='-'&&a[0]!='-')swap(a,b);
	if(a[0]=='-'&&b[0]!='-')
	{
		a.erase(0,1);
		if(a==b)return "0";
		return bijiao(a,b)?'-'+gjdjian(a,b):gjdjian(b,a);
	}
    reverse(a.begin(),a.end()),reverse(b.begin(),b.end());
    int t=0;
    for(int i=0;i<a.size()||i<b.size();i++)
	{
        if(i<a.size())t+=a[i]-'0';
        if(i<b.size())t+=b[i]-'0';
        c+=t%10+'0';
        t/=10;
    }
    if(t)c+=t%10+'0';
    if(flag)c+='-';
    reverse(c.begin(),c.end());
	return c;
}
string gjdjian(string a,string b)
{
	int flag=0;
	if(a==b||a.substr(1,a.size())==b||b.substr(1,b.size())==a)return "0";
	if((a[0]=='-'&&b[0]=='-')||(a[0]!='-'&&b[0]=='-'))
	{
		b.erase(0,1);
		return gjdjia(a,b);
	}
	if(a[0]=='-'&&b[0]!='-')
	{
		a.erase(0,1);
		return '-'+gjdjia(a,b);
	}
    string ans;
	reverse(a.begin(),a.end());
    reverse(b.begin(),b.end());
    if(a.size()<b.size()||b.size()==a.size()&&b>a)swap(a,b),flag=1;
    while(b.size()<a.size())b+='0';
    int c[10005]={0},k=a.size();
    for(int i=0;i<a.size();i++)
    {
        if(a[i]<b[i])a[i]+=10,a[i+1]--;
        c[i]=a[i]-b[i];
    }
    while(c[k]==0&&k>=0)k--;
    while(k>=0)
        ans+=c[k--]+'0';
    if(flag) 
    	return '-'+ans;
    return ans;
}
string gjdcheng(string a,string b)
{
    string ans;
    int flag=0;
    reverse(a.begin(),a.end());
    reverse(b.begin(),b.end());
    if(a[a.size()-1]=='-'&&b[b.size()-1]!='-')flag=1,a.erase(a.size()-1,a.size());
    if(b[b.size()-1]=='-'&&a[a.size()-1]!='-')flag=1,b.erase(b.size()-1,b.size());
    if(a[a.size()-1]=='-')a.erase(a.size()-1,a.size());
    if(b[b.size()-1]=='-')b.erase(b.size()-1,b.size());
    int c[10005]={0},k=a.size()+b.size()+1;
    for(int i=0;i<a.size();i++)
        for(int j=0;j<b.size();j++)
        {
            c[i+j]+=(a[i]-'0')*(b[j]-'0');
            c[i+j+1]+=c[i+j]/10;
            c[i+j]%=10;
        }
    while(c[k]==0&&k>=0)k--;
    while(k>=0)
        ans+=c[k--]+'0';
    if(ans=="")return "0";
    if(flag)
    	return '-'+ans;
    return ans;
}
bool bijiao(string a,string b)
{
	if(a.size()>b.size()||a.size()==b.size()&&a>=b)return 1;
	return 0; 
}
string gjdchu(string a,string b,int x)
{
	if(b=="0")return "error"; 
	int flag=0,flagg=0;
	string c;
	if(a[0]=='-')a.erase(0,1),flag=1,flagg=1;
	if(b[0]=='-')
	{
		b.erase(0,1);
		if(flag==1)flag=0;
		else flag=1;
	}
	int t=b.size(),pos;
	for(int i=b.size();i<a.size();i++)b+='0';
	while(t<=b.size())
	{
		int s=0;
		while(bijiao(a,b))
		{
			a=gjdjian(a,b);
			s++;
		}
		b=b.substr(0,b.size()-1);
		c+=s+'0';
	}
	string::size_type i=c.find_first_not_of('0');
	if(i!=string::npos)c.erase(0,i);
	if(x==1)
	{
		if(c==""||c=="-0")return "0";
		if(flag)
		{
			if(c=="0")return "0";
			return '-'+c;
		}
		return c;
	}
    else
	{
    	if(a==""||a=="-0")return "0";
		if(flagg)
		{
			if(a=="0")return "0";
			return '-'+a;
		}
		return a;
	}
}
int main()
{
}

解释:
string gjdjia(string,string);

高精度加法,返回值字符串,支持负数,不支持小数(后续支持)

其余的...

不说了,跟一样。

好的,如有借鉴者,请附上原文链接(此为原文...原创!!!)

 

王梓轩在2022-12-30 09:46:52追加了内容

链接:https://wenda.codingtang.com/questions/22089/

如有抄袭,后果自负

王梓轩在2022-12-30 09:59:08追加了内容

都复制了,点个赞没意见吧,毕竟两秒时间你花得起吧。

https://kuding1024.com/#/share?uuid=2e66c58fbf33479493161f54ed5336ce

王梓轩在2022-12-30 10:50:56追加了内容

ding


0
已采纳
刘风翔
刘风翔
新手启示者
新手启示者

不错,点赞了

影院工作室求合作!!!!

0
许公铭
许公铭
初级天翼
初级天翼

……………………

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(我就是想水一下)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

……

0
0
0
我要回答