操操操。
开始一直使用 long long 。发现就是最后一个数据过不了。
→ →后来换了 unsigned long long 就AC了。
非递归写法。这道题可以递归的。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
bool a[65];
int main()
{
int s,t;
cin>>t;
unsigned long long n,p,q;
while(t--)
{
cin>>s;
memset(a,0,sizeof(a));
if(1==s)
{
cin>>n;
int i=0;
while(n>1)
{
if(n&1)a[i++]=1,n--;
else a[i++]=0;
n/=2;
}
p=q=1;
while(i-->0)
{
if(1==a[i])
p=p+q;
else
q=p+q;
}
cout<<p<<" "<<q<<endl;
}
else
{
cin>>p>>q;
int i=0;
while(q!=p)
{
if(p>q)
{
a[i++]=1;
p=p-q;
}
else
{
a[i++]=0;
q=q-p;
}
}
n=1;
while(i-->0)
{
if(1==a[i])
n=n*2+1;
else
n=n*2;
}
cout<<n<<endl;
}
}
}