一道大水题
时间限制: C/C++ 2000ms; Java 4000ms 内存限制: 65535K
问题描述
Dr. Pan作为上兰帝国ACM的总负责人,对队员的队员的训练也是日常关心,他要求每周要有一位队员出一道题目。不知过了多少年,终于轮到Shiyiliang出题了,他费尽脑汁,终于出了一道大水题
给定一个偶数n,n的取值范围为[-1e18,1e18],要求一对整数x,y满足以下条件:
1.x*y==n
2.x与n必须同号,即如果n>0则x>0,n<0则x<0
3.x必须为偶数,y必须为奇数
4.y的取值范围为(-1e18,1e18)
5.使x的值尽可能小的情况下,y的值尽可能大
为了减轻队员的工作量,Dr. pan决定只要求输出y即可.
输入描述
第一行一个T(T<=100000)代表样例数。
接下来T行,每行一个数字代表题目中的n(-1e18<=n<=1e18,保证n为偶数)。
输出描述
输出T行。
每行一个数字代表题目中的y,该数字必须为奇数。
样例输入
1
12
样例输出
3
这道题当时没有过一直没有处理好,n==0的时候,此时y应该时最大的奇数才对!!!!!但是没有想到,一直一位y取不了什么值!!!!结束挺大佬说了,简直emmmmmmmmmm,我还太菜了。
这是后来修改后的代码,还没有提交看看,不过改了那个坑应该没啥问题了
已经提交测试,AC了
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
const ll ans=1e18;
int main()
{
int T;
ll n;
scanf("%d",&T);
while(T--)
{
scanf("%lld",&n);
if(n>0)
{
while(true)
{
if((n/2)&1)
{
printf("%lld\n",(n/2));
break ;
}
else
n=n/2;
}
}
else
{
//if(n==0)
//printf("\n");
if(n==0)
printf("%lld\n",ans-1);
else
printf("1\n");
continue;
}
}
//system("pause");
return 0;
}