#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";
}
ZSBK
最新推荐文章于 2024-02-17 18:58:22 发布