ZSBK

来源:互联网 发布:淘宝漏洞q币充值 编辑:程序博客网 时间:2024/06/02 02:48
#include <iostream>#include <string>using namespace std;class Data{    public:    string num;    Data(int n){        num = to_string(n);    }    static Data minus(Data a, Data b){        int n = b.num.length()-1;        int m = a.num.length()-1;        int s = 0, c = 0;        int h = 0;        for(int i=n, j=m;i>=0;i--,j--){            int op1 = a.num[j]-'0'-c;            int op2 = b.num[i]-'0';            //cout<<"op:"<<op1<<" "<<op2<<endl;            if(op1<op2){                c=1;            }else{                c=0;            }            int dif = op1+c*10-op2;            s = dif % 10;            a.num[j] = s+'0';            h = j;        }        // Deal with the head        for(int i = h-1;c!=0&&i>=0;i--){            int op1 = a.num[i]-'0';            int op2 = c;            if(op1<op2){                c=1;            }else{                c=0;            }            int dif = op1+c*10-op2;            s = dif% 10;            a.num[i] = s+'0';        }        return a;    }    static Data mul(Data a, int b){        int n = a.num.length()-1;        int s = 0, c = 0;        for(int i=n;i>=0;i--){            int op1 = a.num[i] - '0';            int prd = op1 * b + c;            c = prd/10;            s = prd%10;            a.num[i] = s + '0';        }        if(c!=0){            a.num = to_string(c)+a.num;        }        return a;    }};Data left_cows(int n ){  if(n<=1){      Data d1(10);      return d1;  }else{      Data t(n-1);      Data dn_1 = Data::mul(left_cows(n-1),3);      Data n_1 = Data::mul(t,2);      Data ret = Data::minus(dn_1,n_1);      cout<<"n:"<<n<<endl;      cout<<"dn_1: "<<dn_1.num<<" "<<"n_1: "<<n_1.num<<endl;      cout<<"dn: "<<ret.num<<endl;      return ret;  }   };int main() {    Data ret = left_cows(100);    cout<<ret.num<<endl;    std::cout << "Hello World!\n";}
原创粉丝点击