【重载运算符求调】本地可行,上传全WA
  • 板块P1303 A*B Problem
  • 楼主C83_AD
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/5/21 13:39
  • 上次更新2024/5/21 17:26:20
查看原帖
【重载运算符求调】本地可行,上传全WA
393852
C83_AD楼主2024/5/21 13:39

如题。

感谢。

#include<stdio.h>
#include<string.h>
#define MX 10090
using namespace std;

struct lnt{//高精度变量
	char num[MX];
	int len;
	//输入输出宏 
	#define getlnt(a) {\
		char ccc;\
		while((ccc=getchar())!='\n')\
			if(a.len||ccc!='0') a.num[++a.len]=ccc;\
	}
	#define putlnt(a){\
		lnt ccc=a;\
		if(ccc.len) printf("%s\n",ccc.num+1);\
		else printf("0\n");\
	}
	lnt operator*(lnt xx){//求积 
		lnt temp;
		temp.len=0;
		memset(temp.num,0,sizeof(temp.num));
		if(!this->len) return temp;
		if(!xx.len) return temp;
		char a[MX],b[MX],c[MX];
		memset(a,0,sizeof(a));
		memset(b,0,sizeof(b));
		memset(c,0,sizeof(c));
		for(int i=1;i<=this->len;++i){
			a[i]=this->num[this->len-i+1]-'0';
		}
		for(int i=1;i<=xx.len;++i){
			b[i]=xx.num[xx.len-i+1]-'0';
		}
		for(int i=1;i<=this->len;++i){
			for(int j=1;j<=xx.len;++j){
				c[i+j-1]+=a[i]*b[j];
			}
		}
		temp.len=this->len+xx.len-1;
		for(int i=1;i<=temp.len;++i){
			if(c[i]>=10){
				c[i+1]+=c[i]/10;
				c[i]%=10;
			}
		}		
		if(c[temp.len]) ++temp.len;
		for(int i=1;i<=temp.len;++i){
			temp.num[i]=c[temp.len-i+1]+'0';
		}
		return temp;
	}
};
lnt a,b;
int main(){
	getlnt(a);
	getlnt(b);
	putlnt((a*b));
}
2024/5/21 13:39
加载中...