差一个模运算求助
查看原帖
差一个模运算求助
1120071
zhangcheng2008楼主2024/3/18 13:54
#include<bits/stdc++.h>
using namespace std;
const int maxn=1000000;
char s[100000];
string s1,s2;
int k=0,p=0;
int a[100000],b[100000],ans[1000000];
int la,lb,len;
int judge(int k){
	int s=k+1-lb;
	for(int i=0;i<lb;i++){
		if(a[s+i]>b[i]) return 1;
		else if(a[s+i]<b[i]) return 0;
	}
	return 1;
}
int f=0;
int main(){
	cin>>s1>>s2;
	la=s1.size();
	lb=s2.size();
	len=max(la,lb);
	for(int i=0;i<la;i++) a[i]=s1[la-i-1]-48;
	for(int i=0;i<lb;i++) b[i]=s2[lb-i-1]-48;
	for(int i=0;i<len;i++){
		ans[i]+=a[i]+b[i];
		if(ans[i]>9){
			ans[i]-=10;
			ans[i+1]++;
		}
	}
	if(ans[len]) len++;
	for(int i=len-1;i>=0;i--) cout<<ans[i];
	cout<<endl;
	//加法
//----------------------------------------------------------------- 
	memset(ans,0,sizeof(ans));
	memset(b,0,sizeof(b));
	memset(a,0,sizeof(a));
	la=s1.size();
	lb=s2.size();
	len=max(la,lb);
	if(la<lb||(la==lb&&s1<s2)){
		f=1;
		swap(s1,s2);
		swap(la,lb);
	}
	for(int i=0;i<la;i++) a[la-i-1]=s1[i]-48;
	for(int i=0;i<lb;i++) b[lb-i-1]=s2[i]-48;
	for(int i=0;i<la;i++) ans[i]=a[i]-b[i];
	for(int i=0;i<la;i++){
		if(ans[i]<0){
			ans[i]+=10;ans[i+1]--;
		}
	}
	int la=len;
	while(ans[len]==0&&len>0) len--;
	if(f) cout<<"-";
	for(len;len>=0;len--) cout<<ans[len];
	cout<<endl;//减法 
//---------------------------------------------------------------------
	memset(ans,0,sizeof(ans));
	memset(b,0,sizeof(b));
	memset(a,0,sizeof(a));
	la=s1.size();
	lb=s2.size();
	len=la+lb;
	for(int i=0;i<la;i++) a[la-i-1]=s1[i]-48;
	for(int i=0;i<lb;i++) b[lb-i-1]=s2[i]-48;	
	for(int i=0;i<len;i++){
		for(int j=0;j<len;j++){
			ans[i+j]+=a[i]*b[j];
		}
	}
	for(int i=0;i<len;i++){
		for(int j=0;j<len;j++){
			if(ans[i]>9){
				ans[i+1]+=ans[i]/10;
				ans[i]%=10;
			}
		}
	}
	while(ans[len]==0&&len>0) len--;
	for(int i=len;i>=0;i--) cout<<ans[i];
	cout<<endl;//乘法 
//----------------------------------------------------------------------
	memset(ans,0,sizeof(ans));
	memset(b,0,sizeof(b));
	memset(a,0,sizeof(a));
	la=s1.size();
	lb=s2.size();
	if(la<lb||(la==lb&&s1<s2)){
		cout<<0;
		return 0;
	}
	for(int i=0;i<la;i++) a[i]=s1[i]-48;
	for(int i=0;i<lb;i++) b[i]=s2[i]-48;
	k=lb-1;
	while(k<la){
		while(judge(k)){
			for(int i=0;i<lb;i++) a[k-i]-=b[lb-1-i];
			for(int i=0;i<lb;i++){
				if(a[k-i]<0){
					a[k-i-1]--;
					a[k-i]+=10;
				}	
			}
			ans[p]++;
		} 
		p++;
		a[k+1-lb+1]+=a[k+1-lb]*10;
		a[k+1-lb]=0;
		k++;
		while(judge(k)==0&&k<la){
			ans[p++]=0;
			a[k+1-lb+1]+=a[k+1-lb]*10;
			a[k+1-lb]=0;
			k++;
		}
	}
	int len=0;
	if(ans[len]==0) len++;
	while(len<p) cout<<ans[len++];//除法
	cout<<endl;
//-----------------------------------------------------------
	memset(ans,0,sizeof(ans));
	memset(b,0,sizeof(b));
	memset(a,0,sizeof(a));

	
	
	
	
	
	
	
	return 0;
}
2024/3/18 13:54
加载中...