【数学问题】大整数运算 加减比较

大整数运算,附上代码,实现了1000位以内的大整数运算,有大整数的加减,以及比较运算。

#include<bits/stdc++.h>
using namespace std;
struct bignum{
	int data[1000];
	int len;
	bignum(){//结构体初始化函数 
		memset(data,0,sizeof(data));
		len=0;
	}
};
//将String类型转换为int数组 
bignum convert(string str){
	bignum bn;
	int len_str = str.length();
	bn.len = len_str;
	for(int i=len_str-1;i>=0;i--){
		bn.data[len_str-1-i] = str[i]-'0';
	}
	return bn;
}

void print_bignum(bignum b){
	if(b.len==0) cout<<"0";//特殊处理,若长度为0表示该大整数为0。 
	for(int i=b.len-1;i>=0;i--){
		printf("%d",b.data[i]);
	}
	cout<<endl;
}
//大整数和 
bignum add(bignum a,bignum b){
	bignum c;
	int max_len,jin=0;//jin表示进位 
	a.len>=b.len?max_len=a.len:max_len=b.len;
	for(int i=0;i<max_len;i++){
		int temp = a.data[i]+b.data[i]+jin;
		c.data[c.len++] = temp%10;
		jin = temp/10;
	}
	if(jin != 0) c.data[c.len++] = jin;
	return c;
}
//大整数差 其中规定a>b; 
bignum sub(bignum a,bignum b){
	bignum c;
	int max_len=0;
	a.len>=b.len?max_len=a.len:max_len=b.len;
	for(int i=0;i<max_len;i++){
		if(a.data[i]<b.data[i]){
			a.data[i] += 10;
			a.data[i+1]--;
		}
		c.data[c.len++] = a.data[i] - b.data[i];
	}
	for(int i=c.len-1;i>=0;i--){
		if(c.data[i]!=0) break;
		else c.len--;
	}
	return c;
} 
//return 1:表示a>b    return -1:表示a<b  return 0:表示a==b 
int compare(bignum a,bignum b){
	if(a.len>b.len) return 1;
	else if(a.len<b.len) return -1;
	else{
		for(int i=a.len-1;i>=0;i--){
			if(a.data[i]>b.data[i]) return 1;
			else if(a.data[i]<b.data[i])return -1;
		}
	}
	return 0;
}
int main(){
//自动读入文件 
#ifdef ONLINE_JUDGE
#else
	freopen("1.txt","r",stdin);//从1.txt读入 
#endif
	string str1,str2;
	cin>>str1>>str2;
	bignum num1 = convert(str1);
	bignum num2 = convert(str2);
	cout<<compare(num1,num2);
	bignum num3 = sub(num1,num2);
	cout<<num3.len<<endl;
	print_bignum(num3);
}

猜你喜欢

转载自blog.csdn.net/qq_39072627/article/details/106980953