确定了n是大于10的,一个结论是尽可能找3来凑。因为整体可能爆long long,需要实现一个乘法高精度。
todo:结论的证明
#include <iostream>
#include <vector>
using namespace std;
int n;
vector<int> ans;
void mul(int x){
int add = 0;
for(int i = 0;i < ans.size();i++) {
int t = ans[i] * x + add;
ans[i] = t % 10,add = t / 10;
}
if(add) ans.push_back(add);
}
void solve() {
ans.push_back(1);
if(n % 3 == 0) {
for(int i = 0;i < n / 3;i++) mul(3);
}else if(n % 3 == 1) {
mul(4);
for(int i = 0;i < n / 3 - 1;i++) {
mul(3);
}
}else if(n % 3 == 2) {
mul(2);
for(int i = 0;i < n / 3;i++) mul(3);
}
}
int main()
{
cin >> n;
solve();
cout << ans.size() << endl;
if(ans.size() <= 100){
for(int i = ans.size() - 1;i >= 0;i--) cout << ans[i];
}else{
for(int i = ans.size() - 1;i >= ans.size() - 100;i--) cout << ans[i];
}
}