标签:digit num1 num2 int 43 len char 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;
}
标签:digit,num1,num2,int,43,len,char,Multiply,Strings 来源: https://blog.csdn.net/smz958150/article/details/93722339
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。