用类实现高精度计算,给出C++代码实现
时间: 2023-06-06 07:08:32 浏览: 121
好的,以下是C语言实现高精度计算的代码:
```
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000 // 最大位数为1000
struct BigInteger {
int data[MAX_LEN];
int len; // 长度,表示有多少位
BigInteger(){ // 构造函数
memset(data, 0, sizeof(data));
len = 1;
}
};
void printBigInteger(BigInteger num){
for(int i=num.len-1; i>=0; i--){
printf("%d", num.data[i]);
}
}
int compare(BigInteger a, BigInteger b){
if(a.len != b.len) return a.len > b.len ? 1 : -1;
for(int i=a.len-1; i>=0; i--){
if(a.data[i] != b.data[i]){
return a.data[i] > b.data[i] ? 1 : -1;
}
}
return 0;
}
BigInteger add(BigInteger a, BigInteger b){
BigInteger c;
int carry = 0;
for(int i=0; i<a.len || i<b.len; i++){
int temp = a.data[i] + b.data[i] + carry;
c.data[c.len++] = temp % 10;
carry = temp / 10;
}
if(carry) c.data[c.len++] = carry;
return c;
}
BigInteger subtract(BigInteger a, BigInteger b){
BigInteger c;
int borrow = 0;
for(int i=0; i<a.len || i<b.len; i++){
int temp = a.data[i] - b.data[i] - borrow;
if(temp >= 0){
c.data[c.len++] = temp;
borrow = 0;
} else {
c.data[c.len++] = temp + 10;
borrow = 1;
}
}
while(c.len > 1 && c.data[c.len-1] == 0) c.len--; // 去掉高位0
return c;
}
// 高精度与低精度相乘
BigInteger multiply(BigInteger a, int b){
BigInteger c;
int carry = 0;
for(int i=0; i<a.len; i++){
int temp = a.data[i] * b + carry;
c.data[c.len++] = temp % 10;
carry = temp / 10;
}
while(carry){
c.data[c.len++] = carry % 10;
carry /= 10;
}
return c;
}
// 高精度除以低精度,返回商和余数
pair<BigInteger, int> divide(BigInteger a, int b){
BigInteger c;
c.len = a.len;
int r = 0; // 余数
for(int i=a.len-1; i>=0; i--){
r = r * 10 + a.data[i];
if(r < b) c.data[i] = 0;
else {
c.data[i] = r / b;
r %= b;
}
}
while(c.len > 1 && c.data[c.len-1] == 0) c.len--; // 去掉高位0
return make_pair(c, r);
}
int main(){
BigInteger a, b, c;
char str[MAX_LEN+1]; // 输入的数字,字符串形式
scanf("%s", str);
for(int i=strlen(str)-1, j=0, t=0; i>=0; i--){
t += (str[i]-'0') * pow(10, j++);
if(j == 4 || i == 0){
a.data[t] = 1;
a.len = t+1;
j = 0;
t = 0;
}
}
printBigInteger(a); // 输出高精度整数
printf("\n");
return 0;
}
```
这里给出了高精度计算的加、减、乘、除等基本运算,另外还包括比较、输出等实用函数,可以根据需要进行扩展。
阅读全文