龙空技术网

C++高精度加减法

黑猫编程 1241

前言:

如今小伙伴们对“c语言字符数组转换成整数”都比较看重,各位老铁们都想要分析一些“c语言字符数组转换成整数”的相关内容。那么小编同时在网摘上汇集了一些对于“c语言字符数组转换成整数””的相关知识,希望朋友们能喜欢,兄弟们一起来了解一下吧!

为什么用高精度算法?

例如:32位计算机有符号整数(int)的取值范围是−2^31−2^31−1

32位计算机无符号整数(unsigned int)的取值范围是0 ~ 2^32−1

高精度数存储

将高精度数每一位数字存储在一个数组中。

用字符数组方法输入两个高精度数

9753186420321

123456789

char s1[N], s2[N];cin >> s1 >> s2;cout << s1 << endl << s2 << endl;
字符串数组转整数数组

方案1:前面元素从低位开始存储

方案2:前前面元素存储大数低位,后面元素存储大数高位

方案3:第一个元素存储大数长度

高精度加法位数相同无进位位数不同无进位位数不同有进位高精度加法模板题

#include <iostream>  #include <vector>#include <string>using namespace std; string str1, str2;vector<int> A, B;vector<int> add(vector<int>& A, vector<int>& B){    vector<int> C;	// 返回值        if(A.size() < B.size()) return add(B, A);	// A的长度 >= B的长度        int k = 0; // 进位    for(int i = 0; i < A.size(); i++){        int t = A[i] + k;        if(i < B.size()) t += B[i];        C.push_back(t % 10);        k = t / 10;    }        if(k) C.push_back(1);    while(C.back() == 0 && C.size() > 1) C.pop_back();        return C;}int main(){		cin >> str1 >> str2;        for(int i = str1.size() - 1; i >= 0; i--) A.push_back(str1[i] - '0');    for(int i = str2.size() - 1; i >= 0; i--) B.push_back(str2[i] - '0');        auto C = add(A, B);        for(int i = C.size() - 1; i >= 0; i--)        cout << C[i];    	return 0;}
高精度减法位数相同无借位位数不同无借位位数不同有借位高精度减法模板题
#include <iostream>#include <cstdio>#include <string>#include <vector>using namespace std;bool cmp(vector<int>& A, vector<int>& B){    if(A.size() != B.size()) return A.size() > B.size();        for(int i = A.size() - 1; i >= 0; i--)        if(A[i] != B[i])            return A[i] > B[i];        return true;}vector<int> sub(vector<int>& A, vector<int>& B){    vector<int> C;    int t = 0; // 借位    for(int i = 0; i < A.size(); i++){		t = A[i] - t;        if(i < B.size()) t -= B[i];        C.push_back((t + 10) % 10);        if(t < 0) t = 1;        else t = 0;    }        while(C.size() > 1 && C.back() == 0) C.pop_back();        return C;}int main() {        string a, b;    vector<int> A, B;        cin >> a >> b;        for(int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0');	for(int i = b.size() - 1; i >= 0; i--) B.push_back(b[i] - '0');    	if(cmp(A, B)){        auto C = sub(A, B);        for(int i = C.size() - 1; i >= 0; i--) cout << C[i];    }        else{        auto C = sub(B, A);        cout << "-";          for(int i = C.size() - 1; i >= 0; i--) cout << C[i];    }	return 0;}

标签: #c语言字符数组转换成整数