本周題目難度‘Medium'材原,使用語言'C'
題目:本次的題目挺有意思的,就是給你兩個低于110位的數(shù)(以字符串形式給你)扼雏,讓你求積后以字符串形式返回結(jié)果南捂。
思路:這個題的思路很簡單,就是實現(xiàn)起來會有很多坑缸兔。方法有很多種日裙,我的思路是將兩個數(shù)的每一位相乘,然后求和惰蜜,最后處理下數(shù)位的問題即可昂拂,當然之間涉及到很多類型轉(zhuǎn)換的問題。具體的還是看代碼吧:
char* multiply(char* num1, char* num2) {
//確定長度
int len1 = strlen(num1);
int len2 = strlen(num2);
//如果有一個是0抛猖,直接返回0
if (len1 == 1 && num1[0] == '0') return "0";
if (len2 == 1 && num2[0] == '0') return "0";
//創(chuàng)建容器并初始化
char* result = malloc(sizeof(char) * (len1 + len2 + 1));
for (int i = 0; i < (len1+len2); i++) {
result[i] = '0';
}
result[(len1+len2)] = '\0';
for (int i = 0; i < len1; i++) {
for (int j = 0; j < len2; j++) {
//用num1的每一位去乘以num2
int tempNum = (num1[i] - '0') * (num2[j] - '0');
//確定是第幾位
int index = i + j + 1;
//求和
int lowCount = (result[index] - '0') + (tempNum % 10);
result[index] = lowCount % 10 + '0';
//是否需要進位
if (lowCount > 9 || tempNum > 9) {
int temp = tempNum > 9 ? (result[index - 1] - '0') + (tempNum / 10) : (result[index-1] - '0');
lowCount = lowCount > 9 ? temp + 1 : temp;
result[index-1] = lowCount % 10 + '0';
int addOne = 2;
//大于10就循環(huán)進位
while (lowCount > 9) {
lowCount = (result[index-addOne] - '0') + 1;
result[index - addOne] = (lowCount % 10 + '0');
addOne++;
}
}
}
}
//位數(shù)處理
if (result[0] == '0') {
for (int i = 0; i < (len1+len2); i++) {
result[i] = result[i+1];
}
}
//返回結(jié)果
return result;
}
效率一般格侯,還有的思路是8位數(shù)8位數(shù)相乘,這樣并不會越界财著,可以提高效率联四,有興趣的小伙伴也可以嘗試一下。