#include<bits/stdc++.h>
using namespace std;
void add(string sa,string sb){
int a[1005]={0},b[1005]={0},c[1005]={0};
int alen=sa.size(),blen=sb.size();
for(int i=0;i<alen;i++)a[alen-1-i]=sa[i]-'0';
for(int i=0;i<blen;i++)b[blen-1-i]=sb[i]-'0';
int clen=max(alen,blen);
for(int i=0;i<clen;i++){
c[i]+=a[i]+b[i];
if(c[i]>9){
c[i+1]+=c[i]/10;
c[i]%=10;
}
}
if(c[clen])clen++;
cout<<"加法结果: ";
for(int i=clen-1;i>=0;i--)cout<<c[i];
cout<<endl;
}
void subtract(string aa,string bb){
int a[1005]={0},b[1005]={0},c[1005]={0};
bool flag=0;
int la=aa.size(),lb=bb.size();
if(la<lb||(la==lb&&aa<bb)){
flag=1;
swap(aa,bb);
swap(la,lb);
}
for(int i=0;i<lb;i++)b[i]=bb[lb-i-1]-'0';
for(int i=0;i<la;i++)a[i]=aa[la-i-1]-'0';
for(int i=0;i<la;i++){
c[i]+=a[i]-b[i];
if(c[i]<0){
c[i+1]--;
c[i]+=10;
}
}
int lc=la;
while(lc>0&&c[lc-1]==0)lc--;
cout<<"减法结果: ";
if(flag&&lc!=0)cout<<"-";
if(lc==0)cout<<"0";
else for(int i=lc-1;i>=0;i--)cout<<c[i];
cout<<endl;
}
void multiply(string aa,string bb){
int a[1005]={0},b[1005]={0},c[2005]={0};
int flaga=1,flagb=1,begina=0,beginb=0;
int la=aa.size(),lb=bb.size(),lc=la+lb;
if(aa[0]=='-'){flaga=-1;begina=1;la--;}
if(bb[0]=='-'){flagb=-1;beginb=1;lb--;}
for(int i=0;i<la;i++)a[i]=aa[la-i-1+begina]-'0';
for(int i=0;i<lb;i++)b[i]=bb[lb-i-1+beginb]-'0';
for(int i=0;i<la;i++){
for(int j=0;j<lb;j++){
c[i+j]+=a[i]*b[j];
}
}
for(int i=0;i<lc;i++){
c[i+1]+=c[i]/10;
c[i]%=10;
}
while(lc>0&&c[lc-1]==0)lc--;
cout<<"乘法结果: ";
if(flaga*flagb<0&&lc>0)cout<<"-";
if(lc==0)cout<<"0";
else for(int i=lc-1;i>=0;i--)cout<<c[i];
cout<<endl;
}
void divide(string aa,long long b){
long long a[10005]={0},c[10005]={0},r=0;
int lena=aa.size();
for(int i=0;i<lena;i++)a[i]=aa[i]-'0';
for(int i=0;i<lena;i++){
r=r*10+a[i];
c[i]=r/b;
r=r%b;
}
int cs=0;
while(cs<lena-1&&c[cs]==0)cs++;
cout<<"除法结果(商): ";
if(cs==lena)cout<<"0";
else for(int i=cs;i<lena;i++)cout<<c[i];
cout<<"\n余数: "<<r<<endl;
}
int compare(string a,string b){
if(a.size()>b.size())return 1;
if(a.size()<b.size())return 2;
for(int i=0;i<a.size();i++){
if(a[i]>b[i])return 1;
if(a[i]<b[i])return 2;
}
return 0;
}
int main(){
cout<<"高精度计算器"<<endl;
cout<<"1.加法 2.减法 3.乘法 4.除法 5.比较 0.退出"<<endl;
int choice;
while(true){
cout<<"\n请选择操作(0-5): ";
cin>>choice;
if(choice==0)break;
string num1,num2;
long long divisor;
switch(choice){
case 1:
cout<<"输入两个加数: ";
cin>>num1>>num2;
add(num1,num2);
break;
case 2:
cout<<"输入被减数和减数: ";
cin>>num1>>num2;
subtract(num1,num2);
break;
case 3:
cout<<"输入两个乘数: ";
cin>>num1>>num2;
multiply(num1,num2);
break;
case 4:
cout<<"输入被除数和除数: ";
cin>>num1>>divisor;
divide(num1,divisor);
break;
case 5:
cout<<"输入两个比较的数: ";
cin>>num1>>num2;
int res=compare(num1,num2);
cout<<"比较结果: ";
if(res==0)cout<<"相等";
else if(res==1)cout<<num1<<" > "<<num2;
else cout<<num1<<" < "<<num2;
cout<<endl;
break;
default:
cout<<"无效选择!"<<endl;
}
}
cout<<"感谢使用高精度计算器!"<<endl;
return 0;
}