大整数运算,附上代码,实现了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);
}