C83_AD @ 2024-05-21 13:39:46
如题。
感谢。
#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));
}
by ngs123 @ 2024-05-30 12:49:38
ab好像没定义