超长代码求调,除和余有问题(玄关
查看原帖
超长代码求调,除和余有问题(玄关
754020
break1楼主2024/12/20 19:48
#include<bits/stdc++.h>
using namespace std;
int a[10005],b[10005],c[10005];
string s1,s2;
bool judge(int* a,int* b,int len){
	if(a[len]>0) return true;
	for(int i=len-1;i>=0;i--){
		if(a[i]>b[i]) return true;
		else if(a[i]<b[i]) return false;
	}
	return true;
}
void add(){
	memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
	int len=0;
	if(s1=="0"&&s2=="0"){
		cout<<0;
		return ;
	}
	for(int i=s1.size()-1,j=0;i>=0,j<s1.size();i--,j++)a[j]=s1[i]-'0';
	for(int i=s2.size()-1,j=0;i>=0,j<s2.size();i--,j++)b[j]=s2[i]-'0';
	while(len<=s1.size()||len<=s2.size()){
		c[len]+=a[len]+b[len];
		c[len+1]+=c[len]/10;
		c[len]%=10;
		len++;
	}
	if(c[0]>0)len--;
	for(int i=len-1;i>=0;i--)cout<<c[i];
	cout<<'\n';
}
void reduce(){
	memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
	int len1=s1.size(),len2=s2.size(),len=max(len1,len2);
	if(len1<len2||len1==len2&&s1<s2){
		cout<<'-';
		swap(s1,s2);
	}
	for(int i=s1.size()-1,j=0;i>=0,j<s1.size();i--,j++)a[j]=s1[i]-'0';
	for(int i=s2.size()-1,j=0;i>=0,j<s2.size();i--,j++)b[j]=s2[i]-'0';
	for(int i=0;i<len;i++){
		if(a[i]<b[i]){
			a[i+1]--;
			a[i]+=10;
		}
		c[i]=a[i]-b[i];
	}
	while(!c[len-1]&&len>1)len--;
	for(int i=len-1;i>=0;i--)cout<<c[i];
	cout<<'\n';
}
void multiply(){
	memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
	int len1=s1.size(),len2=s2.size();
	int len=len1+len2-1;
	for(int i=1;i<=len1;i++)a[i]=s1[len1-i]-'0';
	for(int i=1;i<=len2;i++)b[i]=s2[len2-i]-'0';
	for(int i=1;i<=len1;i++)for(int j=1;j<=len2;j++)c[i+j-1]+=a[i]*b[j];
	for(int i=1;i<=len;i++)if(c[i]>=10){
		c[i+1]+=c[i]/10;
		c[i]%=10;
	}
	if(c[len+1]>0)len++;
	while(len>1&&c[len]==0)len--; 
	for(int i=len;i>=1;i--)cout<<c[i];
	cout<<'\n';
}
void over(){
	memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
	int len1,len2,len;
	len1=s1.size();
	len2=s2.size();
	len=len1-len2;
	for(int i=0;i<len1;i++)a[i]=s1[len1-1-i]-'0';
	for(int i=0;i<len2;i++)b[i]=s2[len2-1-i]-'0';
	for(int i=len1-len2;i>=0;i--)while(judge(a+i,b,len2)){
		c[i]++;
		for(int j=0;j<=len2-1;j++){
			if(a[i+j]<b[j]){
				a[i+j+1]--;
				a[i+j]+=10;
			}
			a[i+j]-=b[j];
		}
	}
	while(a[len1]==0&&len1>0)len1--;
	while(c[len]==0&&len>0)len--;
	for(int i=len;i>=0;i--)cout<<c[i];
	if(len<0) cout<<"0";
	cout<<'\n';
}
void mod(){
	memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    int len1,len2,len;
	len1=s1.size();
	len2=s2.size();
	len=len1-len2;
	for(int i=0;i<len1;i++)a[i]=s1[len1-1-i]-'0';
	for(int i=0;i<len2;i++)b[i]=s2[len2-1-i]-'0';
	for(int i=len1-len2;i>=0;i--)while(judge(a+i,b,len2)){
		c[i]++;
		for(int j=0;j<=len2-1;j++){
			if(a[i+j]<b[j]){
				a[i+j+1]--;
				a[i+j]+=10;
			}
			a[i+j]-=b[j];
		}
	}
	while(a[len1]==0&&len1>0)len1--;
	while(c[len]==0&&len>0)len--;
	if(len1>1||a[0]>0)for(int i=len1;i>=0;i--)cout<<a[i];
	else cout<<0;
	cout<<'\n';
}
int main(){
	cin>>s1>>s2;
	add();
	reduce();
	multiply();
	over();
	mod();
	return 0;
}
2024/12/20 19:48
加载中...