99我
查看原帖
99我
1105563
xuyangming楼主2024/8/8 07:59
#include<bits/stdc++.h>
using namespace std;
string addition(string s1, string s2) 
{
	int a[10005] = {}, b[10005] = {}, c[10009] = {};
	for(int i = 0; i < s1.size(); i++)
	{
		a[i]=s1[s1.size() - i - 1]-'0';
	}
	for(int i = 0; i < s2.size(); i++)
	{
		b[i]=s2[s2.size() - i - 1]-'0';
	}
	int len = max(s1.size(), s2.size());
	for(int i = 0; i < len; i++)
	{
		c[i] += a[i] + b[i];
		if(c[i] > 9) 
		{
			c[i + 1]+=c[i]/10;
			c[i] %= 10;
		}
	}
	if(c[len] != 0)
	{
		len++;
	}
    while(c[len]=='0' && len>0)
    {
      len--;
    }
	string ans="";
	for(int i = len - 1; i >= 0; i--)
	{
		ans = ans+(char)(c[i]+48);
	}
	return ans;
}
bool check(string s1,string s2)
{
	if(s1.size()>s2.size())
	{
	    return 1;
	}
	else if(s1.size()<s2.size())
	{
	    return 0;
	}
	else
	{
		if(s1>=s2)return 1;
		else return 0;
	}
}
string subtraction(string s1, string s2) 
{
	if(s1==s2)
	{
		string ans;
		ans="0";
		return ans;
	}
	bool ok = check(s1,s2);
	if(!ok)
	{
		swap(s1,s2);
	}
	int a[10005] = {}, b[10005] = {}, c[10005] = {};
	for(int i = 0; i < s1.size(); i++)
	{
		a[i]=s1[s1.size() - i - 1]-'0';
	}
	for(int i = 0; i < s2.size(); i++)
	{
		b[i]=s2[s2.size() - i - 1]-'0';
	}
	int len = max(s1.size(), s2.size());
	for(int i = 0; i < len; i++) 
	{
		c[i]+=a[i]-b[i];
		if(c[i]<0)
		{
			c[i+1]--;
			c[i]+=10;
		}
	}
	while(c[len]==0 && len>0)
	{
		len--;
	} 
	string ans="";
	for(int i = len ; i >= 0; i--) 
	{
		ans = ans+(char)(c[i]+48);
	}
	if(!ok)
	{
		ans="-"+ans;
	}
	return ans;
}
string multiplication(string s1,string s2)
{
	int a[10005]={},b[10005]={},ans[20005]={};
	for(int i=1;i<=s1.size();i++)
	{
	    a[i]=s1[s1.size()-i]-'0';
	}
	for(int i=1;i<=s2.size();i++)
	{
	    b[i]=s2[s2.size()-i]-'0';
	}
	for(int i=1;i<=s1.size();i++)
	{
		for(int j=1;j<=s2.size();j++)
		{
			ans[i+j-1]+=a[i]*b[j];
		}
	}
	for(int i=1;i<=s1.size()+s2.size();i++)
	{
		ans[i+1]+=ans[i]/10;
		ans[i]%=10;
	}
	string res="";
	int len=s1.size()+s2.size();
    while(ans[len+1]!='0') 
    {
        len++;
    }
    while(ans[len]=='0' && len>1) 
    {
        len--;
    }
    for(int i=len;i>=1;i--)
    {
        res=res+char(ans[i]+'0');
    }
	return res;
}
string Division(string s,string x)
{
    int ans[10009]={};
	string S="";
	for(int i=0;i<s.size();i++)
	{
		S=S+s[i];
		while(check(S,x))
		{
			S=subtraction(S,x);
			ans[i]++;
		}
	}
	string res;
	int flag=0;
	for(int i=0;i<s.size();i++)
	{
		if(ans[i]>0)
		{
		    flag=1;
		}
		if(flag)
		{
		    res=res+char(ans[i]+'0');
		}
	}
	if(!flag)
	{
	    res='0';
	}
	return res;
}
int main()
{
	string a,b;
	cin>>a>>b;
	string add,sub,mul,div,mod;
    add=addition(a,b);
    sub=subtraction(a,b);
    mul=multiplication(a,b);
    div=Division(a,b);
    mod=subtraction(a,multiplication(div,b));
    cout<<add<<'\n'<<sub<<'\n'<<mul<<'\n'<<div<<'\n'<<mod;
	return 0;
}
2024/8/8 07:59
加载中...