您的位置:首页 > 其它

HDU 1339 A Simple Task

2017-10-13 14:20 411 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1339

 

A Simple Task


Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K
(Java/Others)

Total Submission(s): 2207 Accepted Submission(s):
1231


[align=left]Problem Description[/align]
Given a positive integer n and the odd
integer o and the nonnegative integer p such that n = o2^p.

Example

For n = 24, o = 3 and p = 3.

Task

Write a program which for each data set:

reads a positive integer n,

computes the odd integer o and the nonnegative integer p such that
n = o2^p,

writes the result.

 

[align=left]Input[/align]
The first line of the input contains
exactly one positive integer d equal to the number of data sets, 1
<= d <= 10. The data sets
follow.

Each data set consists of exactly one line containing exactly one
integer n, 1 <= n <=
10^6.

 

[align=left]Output[/align]
The output should consists of exactly d
lines, one line for each data set.

Line i, 1 <= i <= d, corresponds to
the i-th input and should contain two integers o and p separated by
a single space such that n = o2^p.

 

[align=left]Sample Input[/align]

1 24

 

[align=left]Sample Output[/align]

3 3

 

[align=left]Source[/align]

Central Europe 2001, Practice

 

[align=left]Recommend[/align]
Ignatius.L
 
题目大意:求n = o * 2^p,给出n,求o和p。

分析:如果n是奇数,那么p的值必然是0,o的值为n。如果n是偶数,只需要不断地除2,一直到n为奇数,除2的次数为p的值。
代码如下:

#include<iostream>

using namespace std;

int main()

{

 // n=o*2^p   给n
求p o

 int T,n,o;

   
scanf("%d",&T);

 while(T--)

 {

  scanf("%d",&n);

  if(n%2==1)

   printf("%d
0\n",n);

  else

  {

   o=0;

   while(n%2==0)

   {

    n=n/2;

    o++;

   }

   printf("%d
%d\n",n,o);

  }

 }

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: