自己输入的数都没啥问题,提交上去全红。。。有没有佬帮忙看一下
查看原帖
自己输入的数都没啥问题,提交上去全红。。。有没有佬帮忙看一下
794904
Abcdefghijkl楼主2023/1/4 12:49
#include <stdlib.h>
#include <string.h>
int a[2005];
int b[2005];
int c[4005];
int jin(int a[]) {
    for (int i = 0; a[i] != -1; i++) {
        if (a[i] >= 10) {
            if (a[i + 1] == -1) {
                a[i + 1] = a[i] / 10;
                a[i] = a[i] % 10;
            } else {
                a[i + 1] = a[i + 1] + a[i] / 10;
                a[i] = a[i] % 10;
            }
        }
    }
    return *a;
}
int main(void) {
    memset(a, -1, sizeof(a));
    memset(b, -1, sizeof(b));
    memset(c, -1, sizeof(c));
    char a0[2005];
    char b0[2005];
    memset(a0, '\0', sizeof(a0));
    memset(b0, '\0', sizeof(b0));
    fgets(a0, 2000, stdin);
    fgets(b0, 2000, stdin);
    int len = strlen(a0);
    int len1 = strlen(b0);
    len = len - 1;
    len1 = len1 - 1;
    for (int i = 0; i <= len - 1; i++) {
        a[i] = a0[len - i - 1] - 48;
    }//数字倒过来,从个位到高位
    for (int i = 0; i <= len1 - 1; i++) {
        b[i] = b0[len1 - i - 1] - 48;
    }//同上
    for (int i = 0; i <= len1 - 1; i++) {
        for (int j = 0; j <= len - 1; j++) {
            if (c[j + i] == -1) {
                c[j + i] = a[j] * b[i];
            } else {
                c[j + i] = c[j + i] + a[j] * b[i];
            }//因为初始化的是-1,如果是-1说明这个位置还没有数,直接赋值,如果不是-1就加到原来的数上
        }
    }
    jin(c);//把各个位置上的数进位
    int flag=0;
    int num=0;
    for(int i=1;i<=4005;i++){
        if(c[4005-i]!=-1&&c[4005-i]!=0){
            flag=1;
            num=i;
            break;
        }
    }//找到c数组的最高位
    if((len==1&&a[0]==0)||(len1==1&&b[0]==0)){
        printf("0");
    }
    else{
    for(int i=num;i<=4005;i++){
        printf("%d",c[4005-i]);
    }
    }//特判0和输出
    return 0;
}
2023/1/4 12:49
加载中...