您的位置:首页 > 其它

hdu 5142(数学-进制转换)

2016-07-13 21:16 405 查看

NPY and FFT

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 799 Accepted Submission(s): 492


[align=left]Problem Description[/align]
A boy named NPY is learning FFT algorithm now.In that algorithm,he needs to do an operation called "reverse".
For
example,if the given number is 10.Its binary representaion is
1010.After reversing,the binary number will be 0101.And then we should
ignore the leading zero.Then the number we get will be 5,whose binary
representaion is 101.
NPY is very interested in this operation.For
every given number,he want to know what number he will get after
reversing.Can you help him?

[align=left]Input[/align]
The first line contains a integer T — the number of queries (1≤T≤100).
The next T lines,each contains a integer X(0≤X≤231−1),the given number.

[align=left]Output[/align]
For each query,print the reversed number in a separate line.

[align=left]Sample Input[/align]

3
6
8
1

[align=left]Sample Output[/align]

3
1
1

[align=left]Source[/align]
BestCoder Round #22

题意:把一个数字换成二进制,然后将其二进制倒过来得到的新的数的十进制是多少?
题解:直接模拟这个过程.

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include <queue>
using namespace std;

int main()
{
int tcase;
scanf("%d",&tcase);
while(tcase--){
int n;
scanf("%d",&n);
int a[100];
int id=0;
while(n){
a[id++] = n%2;
n/=2;
}
int k=0,flag=0;
for(int i=0;i<id;i++){
if(a[i]!=0) flag = true;
if(flag) a[k++] = a[i];
}
int ans = 0;
for(int i=k-1;i>=0;i--){
int temp = 1;
for(int j=0;j<k-1-i;j++) temp*=2;
ans+=temp*a[i];
}
printf("%d\n",ans);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: