高精度:
高精度计算中需要处理好以下几个问题:
(1)数组的接收方法和存储方法
当输入的数很长时,可采用字符串方式输入。
string s;
cin>>s;
len=s.length();
for(int i=0;i<len;i++){
a[i]=s[len-i-1]-'0';
}
(2)高精度数位数的确定
接收时往往是用字符串的,所以它的位数就等于字符串的长度。
(3)进位、借位处理
加法进位:
c[i]+=a[i]+b[i];
if(c[i]>=10){
c[i]%=10;
c[i+1];
}
减法借位:
if(a[i]<b[i]){
--a[i+1];
a[i]+=10;
}
c[i]=a[i]-b[i];
乘法进位:
c[i+j-1]=a[i]*b[j]+x+c[i+j-1];
x=c[i+j-1]/10;
c[i+j-1]%=10;
高精加:
#include<bits/stdc.h>
using namespace std;
int a[101],b[101],c[101];
int main(){
string s,k;
cin>>s>>k;
int len1=s.length();
int len2=k.length();
for(int i=0;i<len1;i++){
a[i]=s[len1-i-1]-'0';
}
for(int i=0;i<len2;i++){
b[i]=k[len2-i-1]-'0';
}
int len=max(len1,len2);
for(int i=0;i<len;i++){
c[i]=a[i]+b[i]+c[i];
if(c[i]>=10){
c[i]%=10;
c[i+1];
}
}
for(int i=len;i>=0;i--){
if(c[i] || i!=len)
cout<<c[i];
}
return 0;
}
高精减:
#include<bits/stdc.h>
using namespace std;
int a[255],b[255],c[255];
bool cmp(string s1,string s2){
if(s1.size()<s2.size()) return true;
else if(s1.size()>s2.size()) return false;
else{
if(s1<s2) return true;
else return false;
}
}
int main(){
string s,k;
cin>>s>>k;
if(cmp(s,k)){
cout<<"-";
swap(s,k);
}
int len1=s.length();
int len2=k.length();
for(int i=0;i<len1;i++){
a[i]=s[len1-i-1]-'0';
}
for(int i=0;i<len2;i++){
b[i]=k[len2-i-1]-'0';
}