一、题目描述
数字字符串相乘,输入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;
}