文章标题 原创 翻译 转载 文章内容 ``` #include <stdio.h> #include <assert.h> void BigNumMultiply(const char *str1, const char *str2, char *product) { assert(str1 != NULL && str2 != NULL && product != NULL); int i, j; int len1 = (int)strlen(str1); int len2 = (int)strlen(str2); int *dest = (int*)malloc(sizeof(int)*(len1+len2+1)); for (i=0; i<len1+len2+1; i++) { dest[i] = 0; } for (i=0; i<len1; i++) { for (j=0; j<len2; j++) { dest[i+j+1] += (str1[i]-'0')*(str2[j]-'0'); } } for (i=len1+len2-1; i>=0; i--) { // 当i=0时dest[0]=0,这个条件不成立,所以不用担心dest[-1] if (dest[i] >= 10) { dest[i-1] += dest[i]/10; dest[i] %= 10; } product[i] = dest[i]+'0'; } if (product[0] == '0') { i = 1; while (product[i] != '\0') { product[i-1] = product[i]; i++; } product[i-1] = '\0'; } free(dest); return; } int main(void) { char product[50] = {0}; BigNumMultiply("234324", "54651", product); printf("%s\n", product); getchar(); return 0; } ``` 测试: ``` string multiply(string num1, string num2) { std::string result; std::vector<int> data; int total = num1.size() + num2.size() + 1; data.resize(total, 0); for (std::size_t i=0; i<num1.size(); i++) { for (std::size_t j=0; j<num2.size(); j++) { data[i+j+1] += (num1[i]-'0') * (num2[j]-'0'); } } for (int i=num1.size()+num2.size()-1; i>=0; i--) { if (data[i] >= 10) { data[i-1] += data[i] / 10; data[i] %= 10; } result.insert(result.begin(), data[i] + '0'); } while (result.size() > 1 && result[0] == '0') { result = result.erase(0, 1); } return result; } ``` 文章类别 Python Mobile Android Java Shell Life Database Bug Windows IOS Tools Boost Node.js Mac Product Tips C/C++ Golang Javascript React Qt MQ MongoDB Design Web Linux LLM ChatGPT RAG AI 提交