43. Multiply Strings

一、题目描述

​​​数字字符串相乘,输入2个数字字符串,输出他们相乘的结果,例如

Input: num1 = "2", num2 = "3"
Output: "6"

二、思路

1.两数相乘,结果的长度不会大于两数长度和

2.如果输入为0,则输出0

3.当输入不为0时,双重循环遍历对应位数相乘的结果

4.求进位和本位

5.将非0数字转换成字符串,并输出

三、C代码

char * multiply(char * num1, char * num2){
    int len1 = strlen(num1);
    int len2 = strlen(num2);
    int len = len1 + len2;    //相乘的最大长度不会大于两长度和
    int *digit = (int*)malloc(sizeof(int) * len);    //存数字
    memset(digit, 0, sizeof(int) * len);
    if(*num1 == '0' || *num2 == '0')    //判断为0的情况
        return "0";
    for(int i = len1 - 1; i >= 0; i--) {
        for(int j = len2 - 1; j >= 0; j--) {
            digit[i+j+1] += (num1[i] - '0') * (num2[j] - '0');    //每个位置的结果
        }
    }
    for(int i = len - 1; i > 0; i--) {
        digit[i - 1] += digit[i] / 10;    //进位
        digit[i] %= 10;    //本位
    }
    char *str = (char*)malloc(sizeof(char) * (len + 1));    //存字符串
    int i = 0, index = 0;
    while(digit[i] == 0)    //忽略第一位为0情况
        i++;
    while(i < len)
        str[index++] = digit[i++] + '0';    //转为字符串
    str[index] = '\0';
    
    return str;
}

 

上一篇:多类分类及误差分析


下一篇:asp.net网站中添加百度地图功能