在一张无穷大的桌面上,从左往右摆放着无穷张卡片,卡片的编号是0至无穷,第k张卡片的价值是3的k次方(即3k)。
对于一个正整数n来说,如果可以从桌面上选出若干张不同的卡片,选出来的卡片的价值总和等于n,那么n就称为“好数”。
例如:3是“好数”,因为3 = 31 。
1是“好数”,因为1 = 30 。
12是“好数”,因为12 = 32 + 31 。
但2不是“好数”,虽然2 = 30 + 30, 但是30 和 30 是相同的卡片,不符合要求。
同理,19和20都不是“好数”。
给出一个正整数n,你要找到一个最小的“好数”m,要满足m>=n,输出m。
输入格式
一行,一个整数n。 1<=n<=1000000000000000000。
【提示】
对于80%的数据,n<=100。
输出格式
一个整数m。
输入/输出例子1
输入:
14
输出:
27
代码如下
#include<bits/stdc++.h>
using namespace std;
int n,a[10005],cnm=0,sw=1,tq;
int main()
{
cin>>n;
for(int i=1;n!=0;i++)
{
a[i]=n%3;
n/=3;
cnm++;
}
for(int i=1;i<=cnm;i++)
{
if(a[i]>1)
{
a[i]=0;
a[i+1]++;
}
}
tq=a[cnm+1];
for(int i=cnm;i>=1;i--)
{
tq*=3;
tq+=a[i];
}
cout<<tq;
return 0;
}