帮忙用cpp写一个高精度除法竖式生成器
时间: 2023-02-12 08:43:47 浏览: 81
好的,高精度除法竖式生成器的代码如下:
```cpp
#include<iostream>
#include<vector>
using namespace std;
vector<int> highPrecisionDiv(vector<int>& a, int b) {
vector<int> c;
int t = 0;
for (int i = 0; i < a.size(); i++) {
t = t * 10 + a[i];
c.push_back(t / b);
t %= b;
}
while (c.size() > 1 && c.back() == 0) c.pop_back();
return c;
}
int main() {
vector<int> a = { 1, 2, 3, 4, 5 };
int b = 3;
vector<int> c = highPrecisionDiv(a, b);
for (int i = 0; i < c.size(); i++) {
cout << c[i];
}
cout << endl;
return 0;
}
```
该程序实现了高精度除法的竖式计算,实现的方法是每次将整个高精度数的最低位加入被除数,计算出商的一位,并将余数保留下来,作为下一次计算的被除数。
相关问题
帮忙用cpp写一个高精度除法竖式生成器,不用vector
### 回答1:
以下是一个简单的高精度除法竖式生成器的 C++ 代码示例:
```cpp
#include <iostream>
#include <string>
using namespace std;
string div(string a, string b) {
string quotient = "";
string remainder = a;
while (remainder.length() >= b.length() && remainder.compare("0") != 0) {
string tmp = remainder.substr(0, b.length());
int quot = 0;
while (tmp.compare(b) >= 0) {
tmp = sub(tmp, b);
quot++;
}
quotient += to_string(quot);
remainder = tmp + remainder.substr(b.length(), remainder.length());
}
return quotient;
}
string sub(string a, string b) {
string result = "";
int tmp = 0;
for (int i = a.length() - 1; i >= 0; i--) {
tmp = (a[i] - '0') - (b[i] - '0') - tmp;
if (tmp < 0) {
result = char(tmp + 10 + '0') + result;
tmp = 1;
} else {
result = char(tmp + '0') + result;
tmp = 0;
}
}
return result;
}
int main() {
string a, b;
cin >> a >> b;
cout << div(a, b);
return 0;
}
```
请注意,这个代码示例并不能处理负数和小数,如果需要支持这些功能,需要进行相应的更改。
该算法是通过不断将被除数的最高位和除数进行比较得到商的最高位,然后将被除数去掉最高位,在继续进行计算,直到被除数小于除数或者被除数为0。
需要注意的是可能需要高精度减法操作
需要注意的是,高精度除法运算过程中需要用到高精度减法,此处给出了一
### 回答2:
要用C++编写一个高精度除法竖式生成器,不使用vector,可以使用字符串来表示大数。下面是一个简单的实现示例:
```cpp
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
string divide(string dividend, int divisor, int& remainder) {
string quotient;
int carry = 0;
for(int i = 0; i < dividend.length(); i++) {
carry = carry * 10 + (dividend[i] - '0');
quotient.push_back(carry / divisor + '0');
carry %= divisor;
}
remainder = carry;
return quotient;
}
int main() {
string dividend;
int divisor, remainder;
cout << "请输入被除数: ";
cin >> dividend;
cout << "请输入除数: ";
cin >> divisor;
string quotient = divide(dividend, divisor, remainder);
cout << "商为: " << quotient << endl;
cout << "余数为: " << remainder << endl;
return 0;
}
```
这个程序中,我们首先定义了一个名为`divide`的函数,用于执行高精度除法操作。然后在`main`函数中,我们通过输入被除数和除数,调用`divide`函数进行计算,并输出商和余数。
在`divide`函数中,我们通过遍历被除数的每一位数,并依次做除法运算来获得商和余数。我们使用一个变量`carry`来存储已经处理过的位数,并初始化为0。在每一次循环中,我们将`carry`与当前位的数相乘,并加上下一位的数,得到新的`carry`。然后我们将`carry`除以除数,并将商的整数部分加入到结果字符串`quotient`中。最后,我们将`carry`对除数取模,得到新的`carry`值。最后返回结果字符串`quotient`和余数。
这样,我们就可以通过这个程序高精度地进行除法运算并输出结果。
### 回答3:
要用 C++ 写一个高精度除法竖式生成器,不使用 vector,可以使用字符串来处理数字。下面是一个示例实现:
```cpp
#include <iostream>
#include <string>
std::string divide(const std::string& dividend, int divisor) {
std::string quotient; // 商
int remainder = 0; // 余数
for (char digit : dividend) {
int currentNumber = digit - '0';
int currentQuotient = (remainder * 10 + currentNumber) / divisor;
remainder = (remainder * 10 + currentNumber) % divisor;
quotient.push_back(currentQuotient + '0');
}
if (quotient.empty()) {
quotient = "0";
}
return quotient;
}
int main() {
std::string dividend;
int divisor;
std::cout << "请输入被除数:";
std::cin >> dividend;
std::cout << "请输入除数:";
std::cin >> divisor;
std::string result = divide(dividend, divisor);
std::cout << "商为:" << result << std::endl;
return 0;
}
```
这段代码中,首先定义了一个名为 `divide` 的函数,用于执行高精度除法。该函数接收两个参数:被除数字符串和除数整数。在函数中,我们使用一个循环遍历被除数的每一位数字,并利用商和余数的关系进行计算。最后得到的商将以字符串的形式返回。
在主函数中,我们首先读取用户输入的被除数和除数。然后调用 `divide` 函数进行除法运算,并将结果打印出来。
需要注意的是,这里的除法运算符号 `/` 实际上是整数除法,结果舍弃小数部分,只保留整数部分。因此,除数为负数的情况可能会得到不同于手工计算的结果。如果需要进行精确的除法计算,请使用相应的库或算法。
帮忙用cpp写一个高精度除法的项目
高精度除法是一种处理大整数除法的方法。可以使用与普通整数除法类似的方法来实现高精度除法,即使用被除数和除数的各个数位进行计算。
以下是一个使用 C++ 实现高精度除法的示例代码:
```
#include <iostream>
#include <vector>
using namespace std;
vector<int> divide(vector<int> a, int b) {
vector<int> result;
int carry = 0;
for (int i = a.size() - 1; i >= 0; i--) {
carry = carry * 10 + a[i];
result.push_back(carry / b);
carry %= b;
}
reverse(result.begin(), result.end());
while (result.size() > 1 && result.back() == 0)
result.pop_back();
return result;
}
int main() {
vector<int> a = {1, 2, 3, 4, 5};
int b = 3;
vector<int> result = divide(a, b);
for (int i = 0; i < result.size(); i++)
cout << result[i];
cout << endl;
return 0;
}
```
这段代码中,使用了 STL 中的 vector 来储存高精度整数,并使用了一个 divide 函数来实现除法运算。
这段代码的复杂度是O(n)的,其中n是除数的位数
需要注意的是,这里的除法是整除,并且返回商的结果,如果需要余数可以修改代码