变成1
有一个正整数x,你要把x变成1,每一步你都可以选择如下两种操作的其中一种:
操作1: 变大两倍,即x=x*2。
操作2: 缩小六倍,即x=x/6,这个操作的前提是x除以6没有余数。
现在有n个问题,每个问题给出一个正整数x,问至少需要多少步,才能使得x变成1;如果永远不可能把x变成1,输出-1。
输入格式
第一行,一个正整数n,表示有n个问题。 1<=n<=1000。
第二行,共n个正整数,每个正整数代表一个问题的x, 其中x不超过1000000000。
输出格式
共n行,每行一个整数,代表回答一个问题的答案。
输入/输出例子1
输入:
7
1
2
3
12
12345
15116544
387420489
输出:
0
-1
2
-1
-1
12
36
代码:
#include <bits/stdc++.h>
using namespace std;
int n,x,ans,s[10000009];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x;
ans=0;
if(x!=1)
{
for(;;)
{
if(x%3!=0||x==0){s[i]=-1;break;}
if(x%6==0)x=x/6,ans++;
else x=x*2,ans++;
if(x==1)break;
}
}
if(x==1)s[i]=ans;
}
for(int i=1;i<=n;i++)cout<<s[i]<<endl;
return 0;
}
344

被折叠的 条评论
为什么被折叠?



