维基解密

在最近一期的维基解密中,公布了一串神秘的数字,这引起了很多的猜想。

但是只有晓萌知道其中的含义——因为这些神秘的数字就是他留下的记录!

其实你有所不知,现在每天忙碌于百度大厦实习的晓萌,在学校读书期间有一大爱好——每当他遇到一个MM,总是会不由自主地从相貌和身材上分别给其打分,首先他会在相貌上选择一个奇数分a (-1018≤a≤1018),然后在身材上再选择一个偶数分b (-1018 ≤ b ≤ 1018),最后把a与b的乘积v作为总分记录下来。这就是维基解密公布的神秘数字!

现在,已知这些分数v,你能还原MM们的初始分a,b吗?

输入数据的第一行是一个整数T,表示测试数据的组数;然后是T组测试数据,每组测试数据包含一个整数v(-1018≤v≤1018)。

请对应每组测试数据输出格式如"Case X: face:A figure:B"的结果。其中,X是测试数据的编号,A和B则分别代表MM的初始面貌分和身材分。如果总分不能被还原,请输出"Case X: illegal score."

特别提醒:

1.        晓萌是个很注重外貌的人,如果有多种答案,只要输出相貌分最高的那种情况即可。

2.        MM的分数v可能为正,也可能为负,甚至可能为0

3.        注意输出格式,比如大小写、空格等;

4.        也许你会就此将晓萌归为资深屌丝一族,但是,谁没有一段苦逼的青葱岁月呢?

样例输入
2
7
18
样例输出
Case 1: illegal score.
Case 2: face:9 figure:2

解题思路:首先这是两个整数的乘积,范围是(-1018 ≤ b ≤ 1018);直接用int型是不够的,那么就用Long型,这个范围够用的。

第一个是奇数,第二个是偶数,那么我们就直接循环除以2就好了,得到的第一个不能被2整除的数的绝对值就是了要求的奇数了。还有就是0是一个特殊的数,要单独列出来。如果这个数不能被2整除,那就说明这个数没办法是一个奇数,一个偶数的乘积。

具体代码为:

mport java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
Long [] a=new Long [n];
Long temp1 =0L ;
for(int i=0;i<n;i++)
{
a[i]=input.nextLong();
if(a[i]==0L)
   System.out.println( "Case "+(i+1)+": face:99999999999999999 figure:0");  
else
{
temp1=a[i];
while(temp1%2==0)
temp1=temp1/2;
if(temp1==a[i])
System.out.println( "Case "+(i+1)+": illegal score.");  
else
System.out.println( "Case "+(i+1)+": face:"+Math.abs(temp1)+" figure:"+a[i]/Math.abs(temp1));  
}
}
}
}


已经测试结果正确。


不知道为什么计蒜客通不过,试了几次发现没找到原因,有什么数字是特殊的么?如果谁做出来了,麻烦告知,多谢!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值