4,5WA,4的检查点自己电脑跑没问题
查看原帖
4,5WA,4的检查点自己电脑跑没问题
1105226
yizhiyouling楼主2023/11/7 12:34

大佬们救救

#include<iostream>
#include<cstring>
#include<cmath> 
using namespace std;
char a[2100],b[2100]/*计算数*/,c[2100],d[2100]/*输入储存*/;
int result[4200],list[4200];//储存结果 
void change(char a[],char b[],int n)	//倒置函数 
{
	for(int i=0;i<n;++i)
		b[i]=a[n-1-i];
	return;
}
void change(int a[],int b[],int n)	//倒置函数 
{
	for(int i=0;i<n;++i)
		b[i]=a[n-1-i];
	return;
}
void myPrint(char a[],int n)	//char类型数组输出 ,方便调试 
{
	for(int i=0;i<n;++i)
		cout<<a[i];
	return; 
}
void myPrint(int a[],int n)	//int类型数组输出 ,方便调试 
{
	for(int i=0;i<n;++i)
		cout<<a[i];
	return; 
}
int main()
{
	int m,n,Max;	//记录数位 
	int num,sign;	//记录单个数位上的计算结果以及进位信息 
	cin>>c;
	cin>>d;
	if(c[0]=='0'||d[0]=='0'){
		cout<<"0";
		return 0;
	}
	m=strlen(c);	//计算长度 
	n=strlen(d);
	Max=m+n;
	memset(result,0,sizeof(result));	//初始化计算结果 
	memset(a,'0',sizeof(a));	//初始化计算数组 
	memset(b,'0',sizeof(b));
	change(c,a,m);	//倒置 
	change(d,b,n);
	for(int i=0;i<n;++i){
		sign=0;	//每次下一数位运算时重置进位信息 
		for(int j=0;j<m;++j){
			num=(int)(b[i]-'0')*(int)(a[j]-'0')+sign;
			if(num>9){
				sign=num/10;
				num%=10;
			}
			else
				sign=0;
			list[i+j]+=num;
			if(list[i+j]>9){
				sign+=list[i+j]/10;
				list[i+j]%=10;
			}
		}
		if(i==n-1&&sign!=0){
			while(sign){
				num=sign%10;
				list[Max-1]=num;
				sign/=10;
				Max++;
			}	 
		}
	}
	change(list,result,Max-1);
	myPrint(result,Max-1);	
	return 0;	
}
2023/11/7 12:34
加载中...