60分求助

P1303 A*B Problem

GJY201112 @ 2023-04-06 20:22:42

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
    char a1[101],b1[101];
    int a[101],b[101],c[10001],lena,lenb,lenc,i,j,x;
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    scanf("%s",a1);
    scanf("%s",b1);
    lena=strlen(a1);
    lenb=strlen(b1);
    for(i=0;i<=lena-1;i++)
    a[lena-i]=a1[i]-48;
    for(i=0;i<=lenb-1;i++)
    b[lenb-i]=b1[i]-48;
    for(i=1;i<=lena;i++)
    {
        x=0;
        for(j=1;j<=lenb;j++)
        {
            c[i+j-1]=a[i]*b[j]+x+c[i+j-1];
            x=c[i+j-1]/10;
            c[i+j-1]%=10;
        }
        c[i+lenb]=x;
    }
    lenc=lena+lenb;
    while(c[lenc]==0&&lenc>1)
    lenc--;
    for(i=lenc;i>=1;i--)
    cout<<c[i];
    cout<<endl;
}

by kn_wlq @ 2023-04-06 21:45:39

这道题就是先转换,再计算,弄进位,特判,输出完事,你while应该是lenc>0吧,上面为什么清三次呢,满分代码(蒟蒻):

#include<iostream>
#include<string>
using namespace std;
string s1,s2;
int l1,l2,l;
int a[10087],b[10087],c[10087];
int main(){
    cin>>s1>>s2;
    l1=s1.length();
    l2=s2.length();
    for(int i=0;i<l1;i++){
        a[i]=s1[l1-i-1]-48;//转换 
    }
    for(int i=0;i<l2;i++){
        b[i]=s2[l2-i-1]-48;//转换 
    }
    for(int i=0;i<l1;i++){
        for(int j=0;j<l2;j++){
        c[i+j]+=a[i]*b[j];//得数位数等于两个乘积的位数相加 
        }
    }
    l=l1+l2;
    for(int i=0;i<l;i++){
        if(c[i]>9){//进位 
            c[i+1]=c[i+1]+c[i]/10;
            c[i]%=10;
        }
    }
    while(c[l]==0&&l>0){
        l--;
    } 
    for(int i=l;i>=0;i--){
        cout<<c[i];
    }
} 

最好还是自己写哈,可以看看,但是别ctrl c,v

求关注


by GJY201112 @ 2023-04-09 13:35:18

Thank you!已关!


by zzhlzy200912 @ 2023-05-13 15:42:39

@kn_wlq 用得着这么麻烦吗?、 python一行就能搞定了 print(int(input())*int(input()))


|