#define swap(a, b){\
__typeof(a) c=a;\
a=b,b=c;\
}
void reverse(char *s, int len){
int i =0, j= len-1;
while(i<j){
swap(s[i], s[j]);
i++;j--;
}
}
char * multiply(char * num1, char * num2){
int len1 = strlen(num1), len2 = strlen(num2);
int arr[len1+len2], i, j, flag=0, index=0, total;
char *ret = (char *)malloc(sizeof(char) * 0xfff);
memset(arr, 0, sizeof(arr));
reverse(num1, len1);
reverse(num2, len2);
for(i=0; i<len1; i++){
for(j=0; j<len2; j++){
arr[i+j] += (num1[i]-'0') * (num2[j]-'0');
}
}
for(j=0; j<len1+len2; j++){
arr[j] += flag;
flag = 0;
if(arr[j] >= 10){
flag = arr[j] / 10;
arr[j] = arr[j] % 10;
}
ret[index++] = arr[j] + '0';
}
ret[index++] = '\0';
reverse(ret, len1+len2);
/* 丢弃前导为0的高位 */
i = 0;
while(ret[i] == '0') {
i++;
}
/* 如果全部为0,则为0,取用一位 */
if(ret[i] == 0){
i--;
}
return ret+i;
}
leetcode-43. 字符串相乘-C语言
最新推荐文章于 2023-01-27 19:11:57 发布