求助,全wa

P1303 A*B Problem

DingTao @ 2024-08-09 11:06:22

#include <iostream>
#include <string>
using namespace std;
int main(){
    string a , b;
    int maxx, d,flag1 = 0,flag2 = 0,flag = 0;
    int a1[5005] = { }, b1[5005] = { },ans[10010] = {};
    getline(cin,a);
    getline(cin,b);
    maxx = a.size() > b.size() ? a.size():b.size();

    for(int i = a.size() - 1;i >= 0;i --){
        a1[a.size() - i] = a[i] - '0';
        if(a1[a.size() - i] != 0) flag1 = 1;
    }

    for(int i = b.size() - 1;i >= 0;i --){
        b1[b.size() - i] = b[i] - '0';
        if(b1[b.size() - i] != 0) flag2 = 1;
    }
    if(flag1 == 0||flag2 == 0){
        cout << 0;
        return 0;
    }

    for(int i = 1;i <= a.size();i ++){
        for(int j = 1;j <= b.size();j ++){
            ans[i+j-1] += a1[i]*b1[j];
            if(ans[i+j-1] >= 10){
                ans[i+j] = ans[i+j] + ans[i+j-1]/10;
                ans[i+j-1] = ans[i+j-1] % 10;
            }
            d = i + j-1;
        }
    }
    if(ans[d+1] != 0) d ++;
    for(int i = d;i >= 1;i --){
        if(ans[i] != 0) flag = 1;
        if(ans[i] == 0&&flag == 0) continue;
        cout << ans[i];
    }

    return 0;
}

自己测试的第一个样例0*10,输出是0,提交第一个点都过不了,求助。


by DingTao @ 2024-08-09 14:26:08

测试了前三组数据都没问题,提交就wa,有没有大佬指点一下。


by DingTao @ 2024-08-09 16:03:45

把string 改成了 char就过了,不太懂原因,有没有大佬懂为什么。


by hzy_Q @ 2024-08-12 11:59:01

可以参考一下我的,我写了注释,你仔细对照一下看看

#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int a[4100],b[4100],c[4100];//数组范围为最大位数*2
int main()
{
    cin>>s1>>s2;
    int n1=s1.size();
    int n2=s2.size();
    if(s1=="0"||s2=="0")
    {
        cout<<0;
        return 0;
    }
    //翻转字符串,右对齐,个位对齐个位
    reverse(s1.begin(),s1.end());
    reverse(s2.begin(),s2.end());
    //把字符串转换为数字
    for(int i=0;i<n1;i++) a[i]=s1[i]-'0';
    for(int i=0;i<n2;i++) b[i]=s2[i]-'0';
    //列竖式相乘
    for(int i=0;i<n1;i++)
    {
        for(int j=0;j<n2;j++)
        {
            c[i+j]+=a[i]*b[j];//第i位与第j位相乘的值存储在第i*j位 
        }
    }
    //进位
    for(int i=0;i<4101;i++)
    {
        if(c[i]>=10)
        {
            c[i+1]+=c[i]/10;
            c[i]=c[i]%10;
        }
    }
    //倒着寻找最高位
    int pos=4101;
    while(c[pos]==0) pos--;
    for(int i=pos;i>=0;i--) cout<<c[i];
    return 0; 
}

|