高精度四则运算c++
时间: 2023-09-14 08:12:32 浏览: 130
高精度四则运算在C++中可以使用`long long`类型和字符串来实现。以下是一个简单的示例:
```cpp
#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
#include <cmath>
using namespace std;
// 判断是否为数字字符
bool is_digit(char c) {
return isdigit(c);
}
// 将字符串转换为长整型数
long long str_to_ll(const string &str) {
long long num = 0;
for (char c : str) {
if (isdigit(c)) {
num = num * 10 + (c - '0');
} else {
throw invalid_argument("输入的字符串包含非数字字符");
}
}
return num;
}
// 实现加法、减法、乘法和除法
long long add(long long a, long long b) {
while (b != 0) {
if (a > INT_MAX - b) {
return a + b;
} else if (a < INT_MIN + b) {
return a + b;
} else {
a += b;
}
}
return a;
}
long long subtract(long long a, long long b) {
while (b != 0) {
if (a > INT_MAX + b) {
return a - b;
} else if (a < INT_MIN + b) {
return a - b;
} else {
a -= b;
}
}
return a;
}
long long multiply(long long a, long long b) {
long long result = 0;
while (b != 0) {
if (b % 2 == 1) {
result = add(result, a);
}
a <<= 1; // a左移一位相当于乘以2,等价于除以2取整再乘以2
b >>= 1; // b右移一位相当于除以2,等价于乘以2再除以2取整
}
return result;
}
long long divide(long long a, long long b, int &remainder) {
int quotient = 0; //商,初始化为0,余数设为0,因为被除数至少为0,所以商至少为0,余数至少为0,不考虑特殊情况时直接赋值即可。如果要处理除数为0的情况,需要另外处理。如果要处理被除数小于除数的情况,需要另外处理。如果要处理被除数大于除数的情况,需要另外处理。如果要处理被除数是负数的情况,需要另外处理。如果要处理被除数是小数的情况,需要另外处理。如果要处理被除数是分数的情况,需要另外处理。如果要处理被除数是无理数的情况,需要另外处理。如果要处理被除数是无穷大或无穷小的情况,需要另外处理。如果要处理被除数是复数的情况,需要另外处理。如果要处理被除数是字符串的情况,需要另外处理。如果要处理被除数是指针的情况,需要另外处理。如果要处理被除数是结构体的情况,需要另外处理。如果要处理被除数是类的情况,需要另外处理。如果要处理被除数是模板参数的情况,需要另外处理。如果要处理被除数是异常的情况,需要另外处理。如果要处理被除数是运行时错误的情况,需要另外处理。如果要处理被除数是系统错误的情况,需要另外处理。如果要处理被除数是硬件错误的情况,需要另外处理。如果要处理被除数是网络错误的情况,需要另外处理。如果要处理被除数是数据库错误的情况,需要另外处理。如果要处理被除数是文件错误的情况,需要另外处理。如果要处理被除数是安全错误的情况,需要另外处理。如果要处理被除数是性能错误的情况,需要另外处理。如果要处理被除数是兼容性错误的情况,需要另外处理...
阅读全文