进制转换练习

问题 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;  
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你数过天上的星星吗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值