高精度计算
2026-04-02 21:34:39
发布于:广东
加法:
#include<bits/stdc++.h>
using namespace std;
int main(){
string s1, s2;
cin >> s1 >> s2; // 存储
int len1 = s1.size(), len2 = s2.size();
int a[205] = {}, b[205] = {}, c[205] = {};
//转化为数字
for(int i = 0; i < len1; i++) a[len1 - 1 - i] = s1[i] - '0';
for(int i = 0; i < len2; i++) b[len2 - 1 - i] = s2[i] - '0';
int maxlen = max(len1, len2);
//从个位开始慢慢算 模仿竖式计算
for(int i = 0; i < maxlen; i++){
c[i] += a[i] + b[i];
c[i + 1] = c[i] / 10;
c[i] %= 10;
}
while(c[maxlen] != 0) maxlen++;
//输出
for(int i = maxlen - 1; i >= 0; i--) cout << c[i];
return 0;
}
减法:
#include<bits/stdc++.h>
using namespace std;
int main(){
string s1, s2;
cin >> s1 >> s2; // 存储
int len1 = s1.size(), len2 = s2.size();
int a[205] = {}, b[205] = {}, c[205] = {};
//如果是负数的情况
if(len1 < len2){
swap(s1, s2);
swap(len1, len2);
cout << "-";
}
//转化为数字
for(int i = 0; i < len1; i++) a[len1 - 1 - i] = s1[i] - '0';
for(int i = 0; i < len2; i++) b[len2 - 1 - i] = s2[i] - '0';
int maxlen = max(len1, len2);
//从个位开始慢慢算 模仿竖式计算
for(int i = 0; i < maxlen; i++){
if(a[i] < b[i]){
a[i + 1]--;
a[i] += 10;
}
c[i] = a[i] - b[i];
}
//输出
for(int i = maxlen - 1; i >= 0; i--) cout << c[i];
return 0;
}
乘法:
#include<bits/stdc++.h>
using namespace std;
int main(){
string s1, s2;
cin >> s1 >> s2; // 存储
int len1 = s1.size(), len2 = s2.size();
int a[205] = {}, b[205] = {}, c[205] = {};
//转化为数字
for(int i = 0; i < len1; i++) a[len1 - 1 - i] = s1[i] - '0';
for(int i = 0; i < len2; i++) b[len2 - 1 - i] = s2[i] - '0';
//从个位开始慢慢算 模仿竖式计算
for(int i = 0; i < len1; i++){
for(int j = 0; j < len2; j++){
c[i + j] += a[i] * b[i];
c[i + j + 1] += c[i + j] / 10;
c[i + j] %= 10;
}
}
int maxlen = len1 + len2;
//除去前导0
while(c[maxlen - 1] == 0 && maxlen >= 2) maxlen--;
//输出
for(int i = maxlen - 1; i >= 0; i--) cout << c[i];
return 0;
}
除法:
#include<bits/stdc++.h>
using namespace std;
int main(){
//大除小
string s;
int b;
cin >> s >> b;
int len = s.size();
int a[205] = {}, c[205] = {};
for(int i = 0; i < len; i++) a[i] = s[i] - '0';
int num1 = 0, num2 = 0; //被除数 和 余数
for(int i = 0; i < len; i++){
num1 = num2 * 10 + a[i];
c[i] = num1 / b;
num2 = num1 % b;
}
//从头开始
int start = 0;
while(c[start] == 0 && start < len) start++;
for(int i = start; i < len; i++) cout << c[i];
cout << "......" << num2;
return 0;
}
这里空空如也












有帮助,赞一个