字符串乘法转换程序在某未知测试点失败

img


#include
int main(){
    int n,m,k;
    k=0;
    scanf("%d",&n);
    char a[n];scanf("%s",a);
    scanf("%d",&m);
    char b[m];scanf("%s",b);
    int c[100]={0};
    for(int i=0;i2;i++){
        int k=a[i];
        a[i]=a[n-1-i];
        a[n-1-i]=k;
    }
        for(int i=0;i2;i++){
        int k=b[i];
        b[i]=b[m-1-i];
        b[m-1-i]=k;
    }
    for(int i=0;i0;t1]+=((c[i+t]+(a[i]-'0')*(b[t]-'0'))/10);
        c[i+t]=(c[i+t]+(a[i]-'0')*(b[t]-'0'))%10;
    }
    int e=n+m;
    if(c[n+m-1]!=0)e=e+1;
    char f[e];
    for(int i=0;i-1;i++){
        f[i]=c[e-i-2]+'0';
    }
    printf("%s",f);
    
    return 0;
} 

修改如下,供参考:

#include <stdio.h>
#define N 21
int main()
{
    int i,j, n,m,k,c[100]={0};
    char a[N],b[N],f[N+N];
    k=0;
    scanf("%d",&n);
    scanf("%s",a);

    scanf("%d",&m);
    scanf("%s",b);

    for(i=0;i < n / 2;i++){//修改
        k=a[i];
        a[i]=a[n-1-i];
        a[n-1-i]=k;
    }
    for(i=0;i < m / 2;i++){//修改
        k=b[i];
        b[i]=b[m-1-i];
        b[m-1-i]=k;
    }
    for(i=0;i < n;i++)
    {
        for(j=0;j < m;j++)
        {
            c[i+j] += (a[i]-'0')*(b[j]-'0');
            if(c[i+j] >= 10) //进位处理
            {
                c[i+j+1] += c[i+j] / 10;
                c[i+j] %= 10;
            }
        }
    }
        //t=((c[i+t]+(a[i]-'0')*(b[t]-'0'))/10);
        //c[i+t]=(c[i+t]+(a[i]-'0')*(b[t]-'0'))%10;
        //}
    int e=n+m;
    if(c[e-1]==0) e=e-1;//修改 if(c[n+m-1]!=0)e=e+1;
    for(i=0;i<e;i++){
        f[i] = c[e-i-1]+'0';
    }
    f[i] = '\0';  //修改
    printf("%s",f);
    return 0;
}

char字符不能直接转int,前两个for循环的临时变量应该用char类型。下面的代码太乱了,你也没考虑进位。代码修改了一下,运行结果如下:

img

代码:


#include <stdio.h>
int main(){
    int n,m,k;
    char a[22]={0},b[22]={0};
    k=0;
    scanf("%d",&n);
    scanf("%s",a);
    scanf("%d",&m);
    scanf("%s",b);
    int c[100]={0};
    for(int i=0;i<n/2;i++){
        char k=a[i];
        a[i]=a[n-1-i];
        a[n-1-i]=k;
    }
    for(int i=0;i<m/2;i++){
        char k=b[i];
        b[i]=b[m-1-i];
        b[m-1-i]=k;
    }
    int shift = 0;

    for(int i = 0;i<m;i++)  //b
    {
        shift = 0;
        int t = 0;
        for(;t<n;t++) //a
        {
            c[i+t] = c[i+t] + (b[i]-'0')*(a[t]-'0') + shift;
            shift = c[i+t]/10;
            c[i+t] = c[i+t]%10;
            
        }
        if(shift != 0)
        {
            c[i+t] = shift;
        }
    }
    
    int i = 99;
    while(c[i]==0)
        i--;
    for(;i>=0;i--)
        printf("%d",c[i]);
    
    return 0;
}