【蓝桥杯-进制转换!】

输入一个十进制数 NN,将它转换成 RR 进制数输出。在 10 \le R \le 1610R16 的情况下,用'A'表示 1010,用'B'表示 1111,用'B'表示 1111,用'C'表示 1212,用'D'表示 1313,用'E'表示 1414,用'F'表示 1515

输入格式

输入包含两个整数 N(N \le 10000)N(N10000) 和 R(2 \le R \le 16)R(2R16)

注意,NN 有可能是负整数。

输出格式

输出一行,表示转换后的数。

样例输入
23 12
样例输出
1B

正确程序:

#include<iostream>
#include<bits/stdc++.h>
using namespace std;

int main()
{
    int N,R;
    cin>>N>>R;
    int val=abs(N);
    char t[10000];
    int count=0;
    int shu;
    while(val)
    {
        shu=(val%R);
        if(shu>=10)
        {
            switch(shu)
            {
                case 10:t[count++]='A';break;
                case 11:t[count++]='B';break;
                case 12:t[count++]='C';break;
                case 13:t[count++]='D';break;
                case 14:t[count++]='E';break;
                case 15:t[count++]='F';break;
            }
        }
        else
        	t[count++]=shu+'0';
        val/=R;
    }
    if(N<0)
        cout<<"-";
    if(count==0) 
    	cout<<0;
    else
    {
    	for(int i=count-1;i>=0;i--)
        	cout<<t[i];
	}
	return 0;
}
学到的点:
红字部分就是进制转换的关键代码:%和/=  这是套路,记着吧。

然后我之前遇到的问题出在ABCDEF的变换上面,应该直接更改t[count++]而不是去更改shu.

我之前错把shu声明成char类型了,很傻地导致 shu=(char)(val%R) 

然而这是一个典型的错误理解:以为5被强转成char型就是'5'!这是错的!这是要根据ASCII码来转换的,5被强转成char型就转成ASCII码为5的一个字符去了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值