加法
高精度加高精度
代码:
#include<bits/stdc++.h>
using namespace std;
int a[201]={0},b[201]={0},c[201]={0};
string s,n;//定义两个高精度。
int main(){
cin>>s>>n;
for(int i=0;i<s.size();i++){
a[s.size()-i-1]=s[i]-'0';//把string类型改为int类型,倒序输入。
}
for(int i=0;i<n.size();i++){
b[n.size()-i-1]=n[i]-'0';
}
int len=s.size();//取最大值。
if(len<n.size()){
len=n.size();
}
for(int i=0;i<len;i++){
c[i]=a[i]+b[i];//相加。
}
for(int i=0;i<len;i++){
if(c[i]>=10){//判断进位。
c[i+1]=c[i+1]+c[i]/10;
c[i]%=10;
}
}
int sum=0;
for(int i=len;i>=0;i--){
if(sum==0){
if(c[i]!=0){
cout<<c[i];
sum++;
}
}else{
cout<<c[i];
}
}
return 0;
}
思路:先用string类型存储高精度的数,再用int类型的数组存入数据,c[i]用来存储最终答案。
减法
高精度减高精度
代码:
#include<bits/stdc++.h>
using namespace std;
int a[201]={0},b[201]={0},c[201]={0},su;
string s,n;
int k=0;
int main(){
cin>>s>>n;
if(s<n&&s.size()<n.size()||s.size()==n.size()){
k=1;//标记负。
swap(s,n);//交换两个数。
}
for(int i=0;i<s.size();i++){
a[s.size()-i-1]=s[i]-'0';
}
for(int i=0;i<n.size();i++){
b[n.size()-i-1]=n[i]-'0';
}
for(int i=0;i<s.size();i++){
if(a[i]<b[i]){
a[i]+=10;
a[i+1]-=1;
}
c[i]=a[i]-b[i];
}
for(int i=s.size()-1;i>=0;i--){
if(c[i]!=0){
su=i;
break;
}
}
if(k==1){
cout<<"-";
}
for(int i=su;i>=0;i--){
cout<<c[i];
}
return 0;
}
注意,不是完全正确的答案。
思路:先和第一个代码思路一样,用string类型数组存储高精度数。int数组存数据。判断哪个数字大,如果减数大,那么输出时,先输出一个减号,c[i]还是代表结果,判断c[i]是不是小于0,如果是,就把上一位减一。
乘法
高精度乘低精度
代码:
#include<bits/stdc++.h>
using namespace std;
string s;
int a[241],b,c[241],qi;
int main(){
cin>>s>>b;
for(int i=0;i<s.size();i++){
a[s.size()-1-i]=s[i]-'0';
}
for(int i=0;i<s.size();i++){
c[i]=a[i]*b;
}
for(int i=0;i<s.size();i++){
if(c[i]>=10){//判断进位。
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
}
for(int i=s.size()+5-1;i>=0;i--){
if(c[i]!=0){
qi=i;
break;
}
}
for(int i=qi;i>=0;i--){
cout<<c[i];
}
return 0;
}
思路:用一个string数组定义一个高精度,判断进位条件为高精数组中每一个数都要乘低精度后进位。
除法
高精度除低精度
代码:
#include<bits/stdc++.h>
using namespace std;
string s;
int a[241],b,c[241],qi,sum,k=0;
int main(){
cin>>s>>b;
if(b==0){
cout<<0;
return 0;
}
for(int i=0;i<s.size();i++){
a[i]=s[i]-'0';
}
for(int i=0;i<s.size();i++){
sum=sum*10+a[i];
c[i]=sum/b;
sum%=b;
}
for(;c[k]==0&&k<s.size()-1;){
k++;
}
for(;k<=s.size()-1;){
cout<<c[k];
k++;
}
return 0;
}
思路:判断除数是否为0,是的话输出0。