leetcode 43.字符串相乘

一开始想法是把两个字符串转换成一个整数,然后相乘再输出,但是这个方法会溢出,在字符串位数很多的时候。下边的方法是问大佬的,模拟两个数的乘法过程。 

void reverse(int *num,int n)
{
    int i,k;
    k=n/2;
    for(i=0;i<k;i++){
        int temp=num[i];
        num[i]=num[n-1-i];
        num[n-1-i]=temp;
    }
}

char* multiply(char* num1, char* num2) {
    int a1[strlen(num1)];
    int a2[strlen(num2)];
    char num3[strlen(num1)+strlen(num2)];
    int i,j;
    for(i=0;i<strlen(num1);i++)
        a1[i]=num1[i]-'0';
    for(i=0;i<strlen(num2);i++)
        a2[i]=num2[i]-'0';
    reverse(a1,strlen(num1));
    reverse(a2,strlen(num2));
    int c[strlen(num1)+strlen(num2)];
    for(i=0;i<strlen(num1)+strlen(num2);i++){
        c[i]=0;
    }
    for(i=0;i<strlen(num1);i++){
        for(j=0;j<strlen(num2);j++){
            c[i+j]+=a1[i]*a2[j];
        }
    }
    for(i=0;i<strlen(num1)+strlen(num2)-1;i++){
        c[i+1]+=c[i]/10;
        c[i]%=10;
    }
    reverse(c,strlen(num1)+strlen(num2)-1);
    for(i=0;i<strlen(num1)+strlen(num2)-1;i++){
        num3[i]=c[i]+'0';
        //printf("%c",num3[i]);
        }
    return num3;
}

猜你喜欢

转载自blog.csdn.net/qq_38290604/article/details/88079535
今日推荐