这里是题目链接http://www.acmicpc.sdnu.edu.cn/problem/show/1483
题意十分简单,就是给你一个数让你判断是否为2的整数次幂...
开始想用java大数来写的,可是我不会,wa了几发,就没有在做了,改用c++来实现。
从百度可知,2^n转化为二进制之后就是1000....(1除外喽)
所以对于比较常规的数来说只需判断(n&(n-1) == 0 就可以了,而对于大数,我们也好办,搞成字符串的形式即可。
AC代码如下:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char m[1000];
int n[1000];
int T;
cin >> T;
for(int aria = 1; aria <= T; aria++){
scanf("%s", m);
memset(n, 0, sizeof(n));
int k = strlen(m), j = 0, flag = 1;
int i;
while(1){
n[j++] = (m[k-1]-'0')%2;
int c = 0;
for(i = 0; i < k ;i++) {
int s = ((m[i]-'0') + 10*c) /2;
c = (m[i]-'0')%2;
m[i] = s+'0';
}
for(i = 0; i < k; i++)
if(m[i] != '0') break;
if(i == k) break;
}
if(j-2 >= 0){
for(int i = j-2; i >= 0; i--){
if(n[i] == 1){
flag = 0;
break;
}
}
}
if(flag == 1)
cout << "Yes" << endl;
else
cout << "No" << endl;
}
return 0;
}
天知道为什么这个T组输入用while循环就不行,for就可以..emmmm