问题 A: 整数幂
题目描述
判断一个数N是不是2的整数幂,比如8=2^3,输出“Yes”,而9不是2的整数幂,输出“No”。
输入
第一行一个整数T(1≤T≤1000),表示有T组数据。
随后T行,每行一个正整数N(N在int范围内)。
输出
输出“Yes”或“No”。
样例输入 Copy
1
8
样例输出 Copy
Yes
ll t,n;
int fun(int n)
{
if(n == 1) return 1;//2的零次幂
else{
do{
if(n%2 == 0) n /= 2;
else return 0;
}
while(n != 1);
return 1;
}
return 0;
}
int main()
{
t = read();
while(t--)
{
n = read();
if(fun(n)) printf("Yes\n");
else printf("No\n");
}
return 0;
}
问题 C: 十进制转十六进制
题目描述
将十进制数转化为相应的十六进制数
样例输入 Copy
10
样例输出 Copy
A
在这里插入代码片int a[128]; //存放除以16后得到的各个余数
int n,i;
char getnum(int a)
{
switch(a)//进制转换
{
case 0: return '0';break;
case 1: return '1';break;
case 2: return '2';break;
case 3: return '3';break;
case 4: return '4';break;
case 5: return '5';break;
case 6: return '6';break;
case 7: return '7';break;
case 8: return '8';break;
case 9: return '9';break;
case 10: return 'A';break;
case 11: return 'B';break;
case 12: return 'C';break;
case 13: return 'D';break;
case 14: return 'E';break;
case 15: return 'F';break;
}
}
int main()
{
n = read();
if(n == 0) printf("0");
else
{
while(n){
a[i++] = n % 16;
n /= 16;
}
for(int j=i-1;j>=0;j--)//倒叙输出
putchar(getnum(a[j]));
}
return 0;
}
问题 D: 十进制转N进制
题目描述
十进制数转N进制数。
输入
输入两个整数k,n(n<=16)
输出
输出转化后的n进制数
样例输入 Copy
3 2
样例输出 Copy
11
string fun(int x,int n)
{
const string a = "0123456789ABCDEF";
string s="";
if(x == 0) return "0";
while(x > 0)
{
s = a[x%n]+s;//后取的余数放在前面
x = x/n;
}
return s;
}
int main()
{
int x,n;
cin >> x >> n;
cout << fun(x,n) << endl;
return 0;
}
问题 E: 十进制小数转N进制
题目描述
十进制小数x转为N进制数。转换的方法是“乘N顺序取整。”例如x=0.8125 ,N=8,输出0.64。(保证小数<1,转化后的小数可用精确位为20位)
样例输入 Copy
0.8125 8
样例输出 Copy
0.64
double x;
int n;
string s;
void fun(double x,int n,int m)
{
const string a="0123456789ABCDEF";
int u;
s = '.';
while(x>0 && m>0)
{
m--;//可用小数位数减1
x = x*n;
s += a[int(x)];//取余数的整数部分
x -= int(x);//减去整数部分
}
}
int main()
{
cin >> x >> n;
if(x < 1) fun(x,n,20);
printf("0");
cout << s;
return 0;
}
问题 F: N进制转换为十进制
题目描述
N进制整数转换为十进制
输入
一个整数k,一个字符串n。其中n为k进制数
输出
转化后的十进制数
样例输入 Copy
2 11
样例输出 Copy
3
//多项式替代法
int n;
string str;
int fun(int n,string s)
{
int t = 0;
for(int i=0;i<=s.size();i++)
{
if(s[i]>='0' && s[i]<='9')
t = t*n+s[i]-48;
else if(s[i]>='A' && s[i]<='F')
t = t*n+s[i]-55;
else if(s[i]>='a' && s[i]<='f')
t = t*n+s[i]-87;
}
return t;
}
int main()
{
cin >> n;
cin >> str;
cout << fun(n,str) << endl;
return 0;
}
问题 G: N进制小数转十进制
题目描述
输入N进制小数,转十进制
样例输入 Copy
2 0.111
样例输出 Copy
0.875
int n;
string s;
double x,t,j;
double fun(int n,string s)
{
for(int i=s.size();i>=1;i--)
{
if(s[i]>='0' && s[i]<='9')
t = t/n+s[i]-48;
else if(s[i]>='A' && s[i]<='F')
t = t/n+s[i]-55;
else if(s[i]>='a' && s[i]<='f')
t = t/n+s[i]-97;
j = t/n;
}
return j;
}
int main()
{
cin >> n;
cin >> s;
cout << fun(n,s) << endl;
return 0;
}