////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///1.輸入形式為:A[空格或換行符]O[空格或換行符]B;
///2.1,其中A和B為大數,O為運算符(如輸入:123456789/432432);
//// 3.既然處理大數,就不需要輸入小數位;
//// 4.加減不能處理負號,乘除可以;
//// 5.它用於學習和交流。如果您發現任何錯誤或不足之處,可以聯系。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
# include & ltiostream & gt
# include & lt字符串& gt
使用命名空間std
類別重要人物{
字符串num1,num2
字符串結果;
int精度;
充電操作;
公共:
大人物(){
num 1 = num 2 = " 0 ";
outcome = " 0
精度= 5;
}
弦與弦。加號(字符串& amp,字符串& amp);
弦與弦。減法(字符串& amp,字符串& amp);
弦與弦。乘法(字符串& amp,字符串& amp);
弦與弦。除法(字符串& amp,字符串& amp);
void show();
void big figure interface();
弦與弦。revese(字符串& amp);
朋友團隊& amp操作員& gt& gt(istream & amp我,大人物& ampa){
return i & gt& gta . num 1 & gt;& gta .操作& gt& gta . num 2;
}
~BigFigure(){ }
};
void BigFigure::show(){
cout & lt& lt結果:“& lt& lt結果& lt& ltendl
}
void big figure::big figure interface(){
大人物a;
cout & lt& lt“* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */n”;
cout & lt& lt“歡迎光臨.../n ";
cout & lt& lt“大數字四則運算/n”;
cout & lt& lt“* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */n/n”;
cout & lt& lt”備註:/n”;
cout & lt& lt"1.輸入形式為:A[空格或換行符]O[空格或換行符]b ./n ";
cout & lt& lt"2.在1中,A和B是大數,O是運算符(例如,輸入:123456789/432432)。/n ";
cout & lt& lt"3.既然處理大數,就不需要輸入小數位。/n ";
cout & lt& lt"4.加法和減法不能處理負號,但是乘法和除法可以。/n ";
cout & lt& lt"5.用於學習和交流。如果妳發現任何錯誤,妳可以聯系519916178@qq.com。/n/n ";
cout & lt& lt“現在開始,如果要退出,輸入0 0 0結束!/n/n ";
cout & lt& lt"[big figure #]";
CIN & gt;& gta;
while(a.operation!='0'){
開關(操作){
大小寫'+': a.plus(a.num1,a . num 2);
a . show();打破;
大小寫'-': a .減數(a.num1,a . num 2);
a . show();打破;
case '*': a .乘法(a.num1,a . num 2);
a . show();打破;
case '/':a . division(a . num 1,a . num 2);
a . show();打破;
默認值:cout & lt& lta .操作& lt& lt“不是算術運算。/n ";
}
cout & lt& lt"[big figure #]";
CIN & gt;& gta;
}
系統(“cls”);
cout & lt& lt"/n/n/n/n/n/n/t/t退出.../n/n/n/n/n/n/n ";
系統(“暫停”);
}
弦與弦。revese(字符串& amps){
char c;
int t = s . size();
for(int I = 0;我& ltt/2;i++){
c = s[I];
s[I]= s[t-I-1];
s[t-I-1]= c;
}
返回s;
}
弦與弦。BigFigure::plus(字符串& ampstr1,字符串和。Str2){//加法運算,未處理的符號
int min=0,I,t = 0;
字符串溫度;
outcome . clear();
str 1 = revese(str 1);
str 2 = revese(str 2);
min = str 1 . size()& lt;str2.size()?str 1 . size():str 2 . size();
for(I = 0;我& ltmini++){
temp+=(str 1[I]+str 2[I]-96+t)% 10+48;
t =(str 1[I]+str 2[I]-96+t)/10;
}
if(min==str1.size()){
while(我& ltstr2.size()){
temp+=(str 2[I]+t-48)% 10+48;
t =(str 2[I]-48+t)/10;
i++;
}
if(t)temp+= ' 1 ';
}
否則{
while(我& ltstr1.size()){
temp+=(str 1[I]+t-48)% 10+48;
t =(str 1[I]-48+t)/10;
i++;
}
if(t)temp+= ' 1 ';
}
outcome = revese(temp);
返回結果;
}
弦與弦。減法(字符串& ampstr1,字符串和。Str2){//減法運算,未處理符號。
int min=0,flag,I,t = 0;
字符串溫度;
outcome . clear();
if(str 1 . size()>;str 2 . size()| |(str 1 . size()= = str 2 . size()& amp;& ampstr 1 . compare(str 2)= = 1){
str 1 = revese(str 1);
str 2 = revese(str 2);
flag = 0;
min = str 2 . size();
}
else if(str 1 . size()= = str 2 . size()){
如果(!str1.compare(str2)){
outcome =“0”;
返回結果;
}
if(str 1 . compare(str 2)= =-1){
temp = str 1;
str 1 = revese(str 2);
str 2 = revese(temp);
flag = 1;
min = str 2 . size();
}
}
否則{
temp = str 1;
str 1 = revese(str 2);
str 2 = revese(temp);
flag = 1;
min = str 2 . size();
}
temp . clear();
for(I = 0;我& ltmini++){
if(str 1[I]-t & lt;str2[i]){
temp+= str 1[I]+10-t-str 2[I]+48;
t = 1;
}
否則{
temp+= str 1[I]-t-str 2[I]+48;
t = 0;
}
}
while(我& ltstr1.size()){
如果(!t){
while(我& ltstr1.size()){
temp+= str 1[I];
i++;
}
打破;
}
if(str1[i]!= ' 0 '){ temp+= str 1[I]-t;t = 0;}
else temp+= ' 9 ';
i++;
}
字符串s;
for(unsigned int k = temp . size()-1;k & gt=0;k - ){
if(temp[k]!='0'){
for(int n = k;n & gt=0;n -)
s+= temp[n];
打破;
}
}
if(flag)s = '-'+s;
結果= s;
返回結果;
}
弦與弦。乘法(字符串& ampstr1,字符串和。Str2){//乘法運算,已處理符號
char c='0 ',flag = 0;
string temp1,temp2 = " 0
if(str 1[0]= = ' 0 ' | | str 2[0]= = ' 0 '){
outcome = " 0
返回結果;
}
if(str 1[0]= = '-'){ flag++;str1.erase(0,1);}
if(str 2[0]= = '-'){ flag++;str2.erase(0,1);}
str 1 = revese(str 1);
str 2 = revese(str 2);
for(無符號int I = 0;我& ltstr 2 . size();i++){
c =“0”;
for(無符號int j = 0;j & ltstr 1 . size();j++){
temp 1+=((str 2[I]-48)*(str 1[j]-48)+c-48)% 10+48;
c =((str 2[I]-48)*(str 1[j]-48)+c-48)/10+48;
}
如果(c!= ' 0 ')temp 1+= c;
temp 1 = revese(temp 1);
for(int k = 0;k & lt我;k++)
temp 1+=“0”;
temp2=plus(temp1,temp 2);
temp 1 . clear();
}
if(標誌% 2)temp 2 = '-'+temp 2;
結果= temp2
返回結果;
}
弦與弦。除法(字符串& ampstr1,字符串和。Str2){//除法運算,已處理符號
int str=0,flag=0,flag1=0,flag 2 = 0;
字符串temp,temps,tempt
if(str2=="0"){
outcome = " Inf
返回結果;
}
if(str 2 = = " 1 " | | str 1 = = " 0 "){
結果= str 1;
返回結果;
}
if(str 1[0]= = '-'){ flag++;str1.erase(0,1);}
if(str 2[0]= = '-'){ flag++;str2.erase(0,1);}
for(無符號int I = 0;我& ltstr 1 . size();I++){//可分處理
str = 0;
temp+= str 1[I];
if(temp[0]=='0') temp.erase(0,1);
if(temp . size()& gt;str2.size() ||
(temp . size()= = str 2 . size()& amp;& amptemp.compare(str2)>=0)){
while(temp . size()& gt;str2.size() ||
(temp . size()= = str 2 . size()& amp;& amptemp.compare(str2)>=0)){
tempt = str2
temp =減法(temp,tempt);
str++;
}
temps+= str+48;
}
else if(temp . size()= = str 2 . size()& amp;& amptemp . compare(str 2)= = 0)temps+= ' 1 ';
else temps+=“0”;
}
flag 1 = temps . size();
if(temp!= " 0 " & amp& ampprecision) temps+= ' . ';
for(int I = 0;我& lt精密與數學。& amp臨時工!="0";I++){//小數後置的處理
str = 0;
temp+=“0”;
if(temp . size()& gt;str2.size() ||
(temp . size()= = str 2 . size()& amp;& amptemp.compare(str2)>=0)){
while(temp . size()& gt;str2.size() ||
(temp . size()= = str 2 . size()& amp;& amptemp.compare(str2)>=0)){
tempt = str2
temp =減法(temp,tempt);
str++;
}
temps+= str+48;
}
else if(temp . size()= = str 2 . size()& amp;& amptemp . compare(str 2)= = 0)temps+= ' 1 ';
else temps+=“0”;
}
flag 2 = temps . size()-2;
if(temps[temps . size()-1]& gt;= ' 5 ' & amp& ampflag 2-flag 1 = = precision){//舍入處理。
temps.erase(flag1,1);
temps . erase(temps . size()-1,1);
temp = " 1 ";
temps=plus(temps,temp);
if(temps . size()& gt;' flag 2)temps . insert(flag 1+1,1,'.');
else temps.insert(flag1,1,'.');
}
else if(flag 2-flag 1 = = precision)temps . erase(temps . size()-1,1);
temp . clear();
for(無符號整數k = 0;k & lttemps . size();K++){//左手歸零處理
if(temps[k]!='0' || temps[k+1]== ','){
for(int n = k;n & lttemps . size();n++)
temp+= temps[n];
打破;
}
}
if(標誌% 2)temp = '-'+temp;
結果=溫度;
返回結果;
}
Int main(){// main函數
大人物a;
a.big figure interface();
返回0;