- 题解
高精度
- @ 2025-7-10 10:57:54
#include<bits/stdc++.h>
using namespace std;
char a[100001],b[100001];
int c[100001];
int main(){
cin>>a>>b;
int al=strlen(a),bl=strlen(b);
int cl=max(al,bl);
for(int i=0;i<al/2;i++){
swap(a[i],a[al-1-i]);
}
for(int i=0;i<bl/2;i++){
swap(b[i],b[bl-1-i]);
}
int jw=0;
for(int i=0;i<cl;i++){
if(i>=al) a[i]='0';
if(i>=bl) b[i]='0';
c[i]=a[i]-'0'+b[i]-'0'+jw;
jw=0;
cout<<c[i]<<" ";
}
return 0;
}
string 减法
#include <bits/stdc++.h>
using namespace std;
string s1, s2;
int arr[607], brr[607], crr[608];
int main() {
cin >> s1 >> s2;
if (s1.size() != s2.size()) {
if (s1.size() < s2.size()) {
cout << '-';
swap(s1, s2);
}
} else {
if (s1 < s2) {
cout << '-';
swap(s1, s2);
}
}
int lena = s1.size() - 1;
for (int i = 0; i <= lena; i++) {
arr[lena - i] = s1[i] - '0';
}
int lenb = s2.size() - 1;
for (int i = 0; i <= lenb; i++) {
brr[lenb - i] = s2[i] - '0';
}
int jinwei = 0;
for (int i = 0; i <= lena; i++) {
int x = arr[i];
int y = (i <= lenb ? brr[i] : 0);
int tmp = x - y - jinwei;
if (tmp < 0) {
tmp += 10;
jinwei = 1;
} else {
jinwei = 0;
}
crr[i] = tmp;
}
int t = lena;
while (t >= 0 && crr[t] == 0) {
t--;
}
if (t < 0) {
cout << 0;
} else {
for (int i = t; i >= 0; i--) {
cout << crr[i];
}
}
return 0;
}
string 加法
#include <bits/stdc++.h>
using namespace std;
string s1, s2;
int arr[607], brr[607], crr[608];
int main() {
cin >> s1 >> s2;
//倒叙存储
int lena = s1.size() - 1;
for (int i = 0; i <= lena; i++) {
arr[lena - i] = s1[i] - '0';
}
int lenb = s2.size() - 1;
for (int i = 0; i <= lenb; i++) {
brr[lenb - i] = s2[i] - '0';
}
//模拟
int lenc = max(lena, lenb);
int carry = 0;
for (int i = 0; i <= lenc; i++) {
int sum = (arr[i] + brr[i] + carry);
crr[i] = sum % 4;
carry = sum / 4;
}
if(carry==1){
crr[++lenc] = 1;
}
// 输出倒叙
for (int i = lenc; i >= 0; i--) {
cout << crr[i];
}
return 0;
}
0 条评论
目前还没有评论...