加法

高精度加高精度

代码:

#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。