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