高精加:
思路:用整型数组相加、输出
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[10090]={0},b[10090]={0};
string s1,s2;
cin>>s1>>s2;
for(int i=s1.size()-1;i>=0;i--){
a[s1.size()-i]=s1[i]-'0';
}
for(int i=s2.size()-1;i>=0;i--){
b[s2.size()-i]=s2[i]-'0';
}
int i=1;
for(i=1;i<=max(s1.size(),s2.size());i++){
a[i]+=b[i];
if(a[i]>=10){
a[i+1]+=a[i]/10;
a[i]%=10;
}
}
for(int j=i;j>=1;j--){
if(j==i&&a[j]==0){
continue;
}
cout<<a[j];
}
}
高精减:
思路:
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[10090]={0},b[10090]={0};
string s1,s2;
cin>>s1>>s2;
if(s1.size()<s2.size()){
cout<<"-";
string t;
t=s1;
s1=s2;
s2=t;
}else if(s1.size()==s2.size()){
if(s1<s2){
cout<<"-";
string t;
t=s1;
s1=s2;
s2=t;
}
}
for(int i=s1.size()-1;i>=0;i--){
a[s1.size()-i]=s1[i]-'0';
}
for(int i=s2.size()-1;i>=0;i--){
b[s2.size()-i]=s2[i]-'0';
}
int i=1;
for(i=1;i<=max(s1.size(),s2.size());i++){
a[i]-=b[i];
if(a[i]<0){
a[i+1]-=1;
a[i]+=10;
}
}
bool f=1;
for(int j=i-1;j>=1;j--){
if(a[j]==0&&f){
continue;
}else{
f=0;
cout<<a[j];
}
}
if(f){
cout<<0;
}
}
在前面加上了结果为负的判断,如a>b,则a-b=-(b-a),所以先输出负号,然后a、b交换,运算同加法。
高精乘:
思路:将b的每一位与a相乘的结果求出,然后利用高精加算出结果。
温馨提示:博主码力不足,又懒得改,所以高精乘目前只适配。
cpp
#include<bits/stdc++.h>
using namespace std;
struct type{
int c[1000]={0};
}sum[1000];
int main(){
int a[500]={0},b[500]={0};
string s1,s2;
cin>>s1>>s2;
for(int i=s1.size()-1;i>=0;i--){
a[s1.size()-i]=s1[i]-'0';
}
for(int i=s2.size()-1;i>=0;i--){
b[s2.size()-i]=s2[i]-'0';
}
int i=1;
for(i=1;i<=s1.size();i++){
for(int j=1;j<=s2.size();j++){
sum[i].c[i+j-1]=a[i]*b[j];
}
}
for(i=1;i<=s1.size();i++){
for(int j=1;j<=s2.size()+s1.size();j++){
sum[i].c[j+1]+=sum[i].c[j]/10;
sum[i].c[j]%=10;
}
}
for(i=1;i<=s1.size();i++){
for(int j=1;j<=s1.size()+s2.size();j++){
sum[s1.size()+1].c[j]+=sum[i].c[j];
if(sum[s1.size()+1].c[j]>=10){
sum[s1.size()+1].c[j+1]+=sum[s1.size()+1].c[j]/10;
sum[s1.size()+1].c[j]%=10;
}
}
}
bool f=1;
for(int j=s1.size()+s2.size();j>=1;j--){
if(f&&sum[s1.size()+1].c[j]==0){
continue;
}
f=0;
cout<<sum[s1.size()+1].c[j];
}
}
如有不足,请在评论区分享您的思路!