求助50分n大于10的时候乘法出问题了
查看原帖
求助50分n大于10的时候乘法出问题了
1276811
Rain3721楼主2024/11/8 17:09
#include<bits/stdc++.h>
using namespace std;
#define MAX 20000
int a[MAX]={0},b[2]={0},ans[MAX]={};
int checkmult(){
	for(int i=0;i<MAX;i++){
		if(a[MAX-i-1]>9){
			a[MAX-i-2]+=a[MAX-i-1]/10;
			a[MAX-i-1]%=10;
		}
	}
	return 0;
}
int add(){
	for(int i=0;i<MAX;i++){
		ans[MAX-1-i]+=a[MAX-1-i];
		if(ans[MAX-1-i]>9){
			ans[MAX-i-2]+=ans[MAX-i-1]/10;
			ans[MAX-i-1]%=10;
		}
	}
	return 0;
}
int mult(int n){
	int c[MAX]={0};
	b[0]=n/10,b[1]=n%10;
	for(int i=0;i<2;i++){
		for(int j=0;j<MAX;j++){
			c[MAX-i-j-1]=b[1-i]*a[MAX-1-j];
		}
		checkmult();
	}
	for(int k=0;k<MAX;k++) a[k]=c[k];
	return 0;
}
void printans(){
	int j=0;
	for(j;j<MAX;j++) if(ans[j]>0) break;
	if(j==MAX) cout<<0;
	else for(int i=j;i<MAX;i++) cout<<ans[i];
}
void print(){
	int j=0;
	for(j;j<MAX;j++) if(a[j]>0) break;
	if(j==MAX) cout<<0;
	else for(int i=j;i<MAX;i++) cout<<a[i];
}
int main(){
	int n; cin>>n;
	a[MAX-1]=1;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=i;j++){
			mult(j);
		}
		add();
		/*cout<<b[0]<<b[1]<<"   ";
		print();
		cout<<"    ";
		printans();
		cout<<endl;*/
		for(int k=0;k<MAX;k++) a[k]=0;
		a[MAX-1]=1;
	}
	printans();
	return 0;
}
2024/11/8 17:09
加载中...