用c++编写一个完整代码用递归,不使用乘法,实现两个正整数相乘
时间: 2024-10-16 10:08:51 浏览: 41
数据结构之用栈实现阶乘(C++)
在C++中,你可以通过递归的方式实现两个正整数相乘,这种算法称为“字符串相乘”或“辗转相除法”。下面是一个完整的示例:
```cpp
#include <iostream>
#include <string>
// 用于将整数转换为字符串
std::string intToString(int num) {
std::string res;
if (num == 0)
return "0";
while (num > 0) {
res = (num % 10 + '0') + res;
num /= 10;
}
return res;
}
// 递归函数,无乘法实现两数相乘
int recursiveMultiply(std::string num1, std::string num2) {
// 基线条件:如果其中一个数字为0,结果就是另一个数字
if (num1 == "0" || num2 == "0")
return 0;
// 计算进位
int carry = 0;
int n1 = num1.size() - 1;
int n2 = num2.size() - 1;
// 逐位相加并考虑进位
std::string result;
while (n1 >= 0 || n2 >= 0 || carry != 0) {
int digit1 = n1 >= 0 ? num1[n1] - '0' : 0;
int digit2 = n2 >= 0 ? num2[n2] - '0' : 0;
int sum = digit1 + digit2 + carry;
result += (sum % 10 + '0');
carry = sum / 10;
n1--;
n2--;
}
// 将结果反转,因为原始操作是从右到左进行的
std::reverse(result.begin(), result.end());
return stoi(result);
}
int main() {
int num1 = 5;
int num2 = 7;
std::string strNum1 = intToString(num1);
std::string strNum2 = intToString(num2);
int product = recursiveMultiply(strNum1, strNum2);
std::cout << "Product of " << num1 << " and " << num2 << " is: " << product << std::endl;
return 0;
}
```
在这个例子中,我们首先将输入的整数转换为字符串,然后通过递归地处理每一位的相加来模拟乘法过程。当所有位都处理完毕后,我们将结果字符串还原成整数。
阅读全文