大数运算,没有大数除法

大数运算,没有大数除法

#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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值