大数运算,没有大数除法
#include<iostream>
#include<stack>
using namespace std;
string fanzhuan(string val){
int len=val.length();
for(int i=0;i<len/2;i++){
char tmp=val[i];
val[i]=val[len-1-i];
val[len-i-1]=tmp;
}
return val;
}
string add(string num1,string num2){
string res="";
stack<int> data1;
for(int i=0;i<num1.length();i++){
data1.push(num1[i]-'0');
}
stack<int> data2;
for(int i=0;i<num2.length();i++){
data2.push(num2[i]-'0');
}
int jinwei =0;
while(!data1.empty() && !data2.empty()){
res+=char((data1.top()+data2.top()+jinwei)%10+'0');
jinwei=(data1.top()+data2.top()+jinwei)/10;
data1.pop();data2.pop();
}
while(!data1.empty()){
res+=char((data1.top()+jinwei)%10+'0');
jinwei=(data1.top()+jinwei)/10;
data1.pop();
}
while(!data2.empty()){
res+=char((data2.top()+jinwei)%10+'0');
jinwei=(data2.top()+jinwei)/10;
data2.pop();
}
if(jinwei!=0){
res+=char(jinwei+'0');
}
return fanzhuan(res);
}
string cut(string num1,string num2){
string res="";
stack<int> data1;
for(int i=0;i<num1.length();i++){
data1.push(num1[i]-'0');
}
stack<int> data2;
for(int i=0;i<num2.length();i++){
data2.push(num2[i]-'0');
}
int jinwei =0;
while(!data1.empty() && !data2.empty()){
if(data1.top()+jinwei >data2.top()){
res+=char((data1.top()-data2.top()+jinwei)%10+'0');
jinwei=0;
}else{
res+=char((data1.top()-data2.top()+jinwei)%10+'0');
jinwei=-1;
}
data1.pop();data2.pop();
}
while(!data1.empty()){
res+=char((data1.top()+jinwei)%10+'0');
data1.pop();
}
return fanzhuan(res);
}
string multip(string num1,string num2){
string res="0";
stack<int> data1;
for(int i=0;i<num1.length();i++){
data1.push(num1[i]-'0');
}
stack<int> data2;
for(int i=0;i<num2.length();i++){
data2.push(num2[i]-'0');
}
int jinwei =0;
int len=data2.size();
for(int i=0;i<len;i++){
string tmp;
stack<int> dataTmp=data1;
while(!data1.empty()){
tmp+=char((data1.top()*data2.top()%10+jinwei)%10+'0');
jinwei=(data1.top()*data2.top()+jinwei)/10;
data1.pop();
}
data1=dataTmp;
tmp+=char(jinwei+'0');
jinwei=0;
tmp=fanzhuan(tmp);
for(int j=0;j<i;j++){
tmp+='0';//左移一位
}
res=add(res,tmp);
data2.pop();
}
return res;
}
string chufa(string num1,string num2){
}
int main(){
string num1;
string num2;
char fuhao;
cout<<"输入式子记得空格分开"<<endl;
cin>>num1>>fuhao>>num2;
cout<<"结果为:";
int len1=num1.length();
int len2=num2.length();
switch (fuhao)
{
case '+':
/* code */
cout<<add(num1,num2)<<endl;
break;
case '-':
/* code */
if(len1>len2){
cout<<cut(num1,num2)<<endl;
}else if(len1<len2){
cout<<'-'<<cut(num2,num1)<<endl;
}else{
for(int i=0;i<len1;i++){
if(num1[i]>num2[i]){
cout<<cut(num1,num2)<<endl;
break;
}else if(num2[i]<num1[i]){
cout<<'-'<<cut(num2,num1)<<endl;
break;
}else{
continue;
}
}
cout<<0<<endl;
}
break;
case '*':
/* code */
cout<<multip(num1,num2)<<endl;
break;
case '/':
/* code */
cout<<chufa(num1,num2)<<endl;
break;
default:
break;
}
return 0;
}