当前位置:实例文章 » 其他实例» [文章]C++基础算法高精度篇

C++基础算法高精度篇

发布人:shili8 发布时间:2025-02-01 17:05 阅读次数:0

**C++基础算法高精度篇**

在计算机科学中,高精度算法是指能够处理非常大或非常小的数字,而不失去精确性的算法。这些算法通常用于金融、科学计算等领域。在本文中,我们将介绍一些常见的高精度算法及其C++实现。

###1. 高精度加法高精度加法是指能够处理非常大或非常小的数字,而不失去精确性的加法算法。这种算法通常用于金融、科学计算等领域。

cpp#include <iostream>
using namespace std;

class HighPrecision {
private:
 int64_t num[100]; // 高精度数的数组表示public:
 void setNum(int64_t n) { // 设置高精度数 for (int i =0; i < 100; i++) {
 if (i ==99) {
 num[i] = n %10;
 } else {
 num[i] = n /10 %10;
 }
 }
 }

 void add(HighPrecision& other) { // 高精度加法 int carry =0;
 for (int i =99; i >=0; i--) {
 int sum = num[i] + other.num[i] + carry;
 num[i] = sum %10;
 carry = sum /10;
 }
 }

 void print() { // 输出高精度数 for (int i =99; i >=0; i--) {
 cout << num[i];
 }
 cout << endl;
 }
};

int main() {
 HighPrecision a, b;
 a.setNum(12345678901234567890);
 b.setNum(98765432109876543210);
 a.add(b);
 a.print();
 return0;
}


###2. 高精度乘法高精度乘法是指能够处理非常大或非常小的数字,而不失去精确性的乘法算法。这种算法通常用于金融、科学计算等领域。

cpp#include <iostream>
using namespace std;

class HighPrecision {
private:
 int64_t num[100]; // 高精度数的数组表示public:
 void setNum(int64_t n) { // 设置高精度数 for (int i =0; i < 100; i++) {
 if (i ==99) {
 num[i] = n %10;
 } else {
 num[i] = n /10 %10;
 }
 }
 }

 void multiply(HighPrecision& other) { // 高精度乘法 int64_t result[200];
 for (int i =0; i < 100; i++) {
 for (int j =0; j < 100; j++) {
 if (num[i] !=0 && other.num[j] !=0) {
 result[i + j] += num[i] * other.num[j];
 }
 }
 }

 int carry =0;
 for (int i =199; i >=0; i--) {
 int sum = result[i] + carry;
 result[i] = sum %10;
 carry = sum /10;
 }

 for (int i =99; i >=0; i--) {
 num[i] = result[2 * i];
 }
 }

 void print() { // 输出高精度数 for (int i =99; i >=0; i--) {
 cout << num[i];
 }
 cout << endl;
 }
};

int main() {
 HighPrecision a, b;
 a.setNum(12345678901234567890);
 b.setNum(98765432109876543210);
 a.multiply(b);
 a.print();
 return0;
}


###3. 高精度除法高精度除法是指能够处理非常大或非常小的数字,而不失去精确性的除法算法。这种算法通常用于金融、科学计算等领域。

cpp#include <iostream>
using namespace std;

class HighPrecision {
private:
 int64_t num[100]; // 高精度数的数组表示public:
 void setNum(int64_t n) { // 设置高精度数 for (int i =0; i < 100; i++) {
 if (i ==99) {
 num[i] = n %10;
 } else {
 num[i] = n /10 %10;
 }
 }
 }

 void divide(HighPrecision& other) { // 高精度除法 int64_t result[100];
 for (int i =0; i < 100; i++) {
 if (num[i] !=0 && other.num[99] !=0) {
 result[i] = num[i] / other.num[99];
 } else {
 result[i] =0;
 }
 }

 int carry =0;
 for (int i =99; i >=0; i--) {
 int sum = result[i] + carry;
 result[i] = sum %10;
 carry = sum /10;
 }

 for (int i =99; i >=0; i--) {
 num[i] = result[2 * i];
 }
 }

 void print() { // 输出高精度数 for (int i =99; i >=0; i--) {
 cout << num[i];
 }
 cout << endl;
 }
};

int main() {
 HighPrecision a, b;
 a.setNum(12345678901234567890);
 b.setNum(98765432109876543210);
 a.divide(b);
 a.print();
 return0;
}


###4. 高精度平方根高精度平方根是指能够处理非常大或非常小的数字,而不失去精确性的平方根算法。这种算法通常用于金融、科学计算等领域。

cpp#include <iostream>
using namespace std;

class HighPrecision {
private:
 int64_t num[100]; // 高精度数的数组表示public:
 void setNum(int64_t n) { // 设置高精度数 for (int i =0; i < 100; i++) {
 if (i ==99) {
 num[i] = n %10;
 } else {
 num[i] = n /10 %10;
 }
 }
 }

 void squareRoot() { // 高精度平方根 int64_t result[50];
 for (int i =0; i < 50; i++) {
 if (num[i] !=0) {
 result[i] = num[i] * num[i];
 } else {
 result[i] =0;
 }
 }

 int carry =0;
 for (int i =49; i >=0; i--) {
 int sum = result[i] + carry;
 result[i] = sum %10;
 carry = sum /10;
 }

 for (int i =49; i >=0; i--) {
 num[i] = result[2 * i];
 }
 }

 void print() { // 输出高精度数 for (int i =99; i >=0; i--) {
 cout << num[i];
 }
 cout << endl;
 }
};

int main() {
 HighPrecision a;
 a.setNum(12345678901234567890);
 a.squareRoot();
 a.print();
 return0;
}


###5. 高精度对数高精度对数是指能够处理非常大或非常小的数字,而不失去精确性的对数算法。这种算法通常用于金融、科学计算等领域。

cpp#include <iostream>
using namespace std;

class HighPrecision {
private:
 int64_t num[100]; // 高精度数的数组表示public:
 void setNum(int64_t n) { // 设置高精度数 for (int i =0; i < 100; i++) {
 if (i ==99) {
 num[i] = n %10;
 } else {
 num[i] = n /10 %10;
 }
 }
 }

 void logarithm() { // 高精度对数 int64_t result[50];
 for (int i =0; i < 50; i++) {
 if (num[i] !=0) {
 result[i] = log(num[i]);
 } else {
 result[i] =0;
 }
 }

 int carry =0;
 for (int i =49; i >=0; i--) {
 int sum = result[i] + carry;
 result[i] = sum %10;
 carry = sum /10;
 }

 for

相关标签:算法c++开发语言
其他信息

其他资源

Top