HLEP!

P1303 A*B Problem

zyz1001 @ 2018-10-20 20:30:43

include<cstdio>

include<cstring>

using namespace std; struct sd{ int t[3000],len; }; sd readit( ){ sd x;char st[3000]; memset(x.t,0,sizeof(x.t)); scanf("%s",st); int k=0; x.len=strlen(st); for(int i=x.len-1;i>=0;i--){ x.t[k]=st[i]-48;k++; } return x; } sd add(sd a,sd b){ int k=a.len>b.len?a.len:b.len; for(int i=0;i<k;i++){ a.t[i]=a.t[i]+b.t[i]; a.t[i+1]=a.t[i+1]+a.t[i]/10; a.t[i]=a.t[i]%10; } a.len=1; for(int i=k;i>=1;i--) if(a.t[i]>0){ a.len=i+1;break; } return a; }

sd mult(sd a,sd b){ sd t; t.len=a.len+b.len; for(int i=0;i<a.len;i++) for(int j=0;j<b.len;j++){ t.t[i+j]=a.t[i]*b.t[j]+t.t[i+j]; t.t[i+j+1]=t.t[i+j]/10+t.t[i+j+1]; t.t[i+j]=t.t[i+j]%10; } a.len=1; for(int i=t.len;i>=1;i--) if(t.t[i]>0){ a.len=i+1;break; } for(int i=0;i<a.len+b.len;i++){ a.t[i]=t.t[i]; } return a; }

void outit(sd x){ for (int i=x.len-1;i>=0;i--){ printf("%d",x.t[i]); } }

int main(){ sd a=readit(),b=readit(),c; c=mult(a,b); outit(c); return 0; }


by 钱逸凡 @ 2018-10-20 20:32:58

@王川德少 请调整一下格式


by Ikari_Shinji @ 2018-10-20 20:33:13

希望更丰富的展现?使用Markdown


by TRZ_2007 @ 2018-10-20 20:34:14

a=input()
b=input()
print(int(a)+int(b))

by zyz1001 @ 2018-10-20 20:34:31

#include<cstdio>
#include<cstring>
using namespace std;
struct sd{
    int t[3000],len;
};
sd readit( ){
    sd x;char st[3000];
    memset(x.t,0,sizeof(x.t));
    scanf("%s",st);
    int k=0;
    x.len=strlen(st);
    for(int i=x.len-1;i>=0;i--){
        x.t[k]=st[i]-48;k++;
    }
    return x;
}
sd add(sd a,sd b){
    int k=a.len>b.len?a.len:b.len;
    for(int i=0;i<k;i++){
        a.t[i]=a.t[i]+b.t[i];
        a.t[i+1]=a.t[i+1]+a.t[i]/10;
        a.t[i]=a.t[i]%10;
    }
    a.len=1;
    for(int i=k;i>=1;i--)
        if(a.t[i]>0){
            a.len=i+1;break;
        }
    return a;
}

sd mult(sd a,sd b){
    sd t;
    t.len=a.len+b.len;
    for(int i=0;i<a.len;i++)
        for(int j=0;j<b.len;j++){
        t.t[i+j]=a.t[i]*b.t[j]+t.t[i+j];
        t.t[i+j+1]=t.t[i+j]/10+t.t[i+j+1];
        t.t[i+j]=t.t[i+j]%10;
    }
    a.len=1;
    for(int i=t.len;i>=1;i--)
        if(t.t[i]>0){
            a.len=i+1;break;
        }
    for(int i=0;i<a.len+b.len;i++){
        a.t[i]=t.t[i];
    }
    return a;
}

void outit(sd x){
    for (int i=x.len-1;i>=0;i--){
        printf("%d",x.t[i]);
    }
}

int main(){
    sd a=readit(),b=readit(),c;
    c=mult(a,b);
    outit(c);
    return 0;
} 

by TRZ_2007 @ 2018-10-20 20:34:31

玄学Python


by 钱逸凡 @ 2018-10-20 20:36:42

mult为何不直接返回t?


by zyz1001 @ 2018-10-20 20:39:21

@钱逸凡 直接返回t,最后一个过了,但第一个又错了=n=


by 钱逸凡 @ 2018-10-20 20:41:56

#include<cstdio>
#include<cstring>
using namespace std;
struct sd{
    int t[3000],len;
};
sd readit( ){
    sd x;char st[3000];
    memset(x.t,0,sizeof(x.t));
    scanf("%s",st);
    x.len=strlen(st);
    int k=0;
    for(int i=x.len-1;i>=0;i--){
        x.t[k++]=st[i]-48;
    }
    return x;
}
sd mult(sd a,sd b){
    sd t;
    t.len=a.len+b.len;
    for(int i=0;i<a.len;i++)
        for(int j=0;j<b.len;j++){
        t.t[i+j]=a.t[i]*b.t[j]+t.t[i+j];
        t.t[i+j+1]=t.t[i+j]/10+t.t[i+j+1];
        t.t[i+j]=t.t[i+j]%10;
    }
    int l=t.len;
   while(t.t[l]==0&&l>0)l--;
   t.len=l;
    return t;
}

void outit(sd x){
    for (int i=x.len;i>=0;i--){
        printf("%d",x.t[i]);
    }
}
int main(){
    sd a=readit(),b=readit(),c;
    c=mult(a,b);
    outit(c);
    return 0;
} 

帮你改了一下,可以过了。

你之前输出错了


by 钱逸凡 @ 2018-10-20 20:42:33

注意输出要从x.len开始


by zyz1001 @ 2018-10-20 20:50:49

@钱逸凡 谢谢=v=


| 下一页