题目
在一张无穷大的桌面上,从左往右摆放着无穷张卡片,卡片的编号是0至无穷,第K张卡片的价值是3的K次方(即3^k)。对于一个正整数n来说,如果可以从桌面上选出若干张不同的卡片,选出来的卡片价值总和等于n,那么n就称为“好数”。例如:3是“好数”,因为3=3^1; 1是“好数”,因为1=3^0; 12是“好数”,因为12=3^2+3^1; 但2不是“好数”,虽然2=3^0+3^0,但是3^0和3^0是相同的卡片,不符合要求。同理,19和20都不是“好数”。给出一个n个整数,如果是“好数”,输出YES,如果不是,输出NO。
输入格式
第一行,一个整数n。1<=x<=1000。接下来n行,每行一个整数x,1<=x<=1000000000000000000。
输出格式
n行,每行YES或者NO。
输入/输出例子1
输入:
3
12
13
15
输出:
YES
YES
NO
禁止抄袭
违者......!后果自负
#include<bits/stdc++.h>//代码在此,无批注
using namespace std;
int main()
{
long long t,n,knt;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>t;
while(t>1)
{
if(t%3>1)
{
knt=1;
break;
}
t/=3;
}
if(knt==1)cout<<"NO"<<endl;
else cout<<"YES"<<endl;
knt=0;
}
return 0;
}