第一个样例过不了

P1303 A*B Problem

KevinMark @ 2022-11-25 15:13:44

too short on line 1? 第一个样例过不了

#include<stdc++.h>
using namespace std;

int main()
{
    //定义两个字符串,输入
    string a, b;

    cin >> a >> b;
    int lena, lenb = 0;
    lena = a.length();
    lenb = b.length();
    //逆序存放数字
    int arra[9999] = { 0 };
    int arrb[9999] = { 0 };
    for (int i = 1; i <= lena; i++)
    {
        arra[i] = a[lena - i] - '0';
    }
    for (int i = 1; i <= lenb; i++)
    {
        arrb[i] = b[lenb - i] - '0';
    }
    //定义结果数组,错位相加
    int c[99999] = { 0 };
    for (int j = 1; j <= lenb; j++)
    {
        for (int i = 1; i <= lena; i++)
        {
            c[i + j - 1] += arra[i] * arrb[j];
        }
    }
    //处理进位问题
    for (int i = 1; i <= lena + lenb - 1; i++)
    {
        if (c[i] > 9)
        {
            c[i + 1] += c[i] / 10;
            c[i] %= 10;
        }

    }
    //删除c中多余的0
    int lenc = lena + lenb;
    while (c[lenc] == 0 && lenc > 1)
    {
        lenc--;
    }
    //按照lenc输出

    for (int i = lenc; i >= 1; i--)
    {
        cout << c[i];
    }
    return 0;
}

by Alex_smy @ 2022-11-25 15:18:01

你看下题解吧,我搞不懂


by Alex_smy @ 2022-11-25 15:18:32

我最讨厌高精


by Jasoncwx @ 2022-11-25 15:25:32

@KevinMark too short on line 1就是你在第 1 行输出得太短了,可能乘法进位没弄好


by AC_CSP @ 2022-11-25 15:42:32

@momo430

你看下题解吧,我搞不懂

我最讨厌高精

这很有意义吗??!


by WiliestJoseph15 @ 2022-11-26 11:06:41

80分代码:

#include<bits/stdc++.h>
using namespace std;
int a_len,b_len,da_len,da[100000000]={0};
bool qd0=true;
char a[2001],b[2001];
int A[2001],B[2001],C[2001];
int main(){
    cin>>a>>b;
    for(a_len=0;a[a_len]!=NULL;a_len++){
        A[a_len]=a[a_len]-48;
    }
    reverse(A,A+a_len);
    for(b_len=0;b[b_len]!=NULL;b_len++){
        B[b_len]=b[b_len]-48;
    }
    reverse(B,B+b_len);
    da_len=b_len+a_len-1;
    for(int i=0;i<a_len;i++){
        for(int j=0;j<b_len;j++){
            da[i+j]+=A[i]*B[j];
        }
    }
    for(int i=0;i<da_len;i++){
        if(da[i]>9){
            da[i+1]+=da[i]/10;
            da[i]%=10;
        }
    }
    if(da[da_len]>0){
        da_len++;
    }
    for(int i=da_len-1;i>=0;i--){
        if(qd0&&da[i]==0&&da_len!=1){
            continue;
        }
        else{
            qd0=false;
        }
        cout<<da[i];
    }
    return 0;
}

输入: 0 0

输出: 0

AC代码:

#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int a_len,b_len,da_len,da[100000000]={0};
char a[2001],b[2001];
int A[2001],B[2001],C[2001];
int main(){
    cin>>a>>b;
    for(a_len=0;a[a_len]!=NULL;a_len++){
        A[a_len]=a[a_len]-48;
    }
    reverse(A,A+a_len);
    for(b_len=0;b[b_len]!=NULL;b_len++){
        B[b_len]=b[b_len]-48;
    }
    reverse(B,B+b_len);
    da_len=b_len+a_len-1;
    for(int i=0;i<a_len;i++){
        for(int j=0;j<b_len;j++){
            da[i+j]+=A[i]*B[j];
        }
    }
    for(int i=0;i<da_len;i++){
        if(da[i]>9){
            da[i+1]+=da[i]/10;
            da[i]%=10;
        }
    }
    if(da[da_len]>0){
        da_len++;
    }
    while(da[da_len-1]==0){
        da_len--;
    }
    if(da_len<0){
        cout<<0<<endl;
        return 0;
    }
    for(int i=da_len-1;i>=0;i--){
        cout<<da[i];
    }
    return 0;
}

输入: 0 0

输出: 0

这点很奇怪,我两段代码都输出0,但第一段代码却不能过


by KevinMark @ 2022-11-26 14:27:31

@Jasoncwx 输入是0和10 输出是0,完全一模一样呀


|