【重载运算符求调】本地可行,上传全WA

P1303 A*B Problem

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好像没定义


|