十进制转十六进制(蓝桥杯)

解题思路

说下几个坑吧:
1、不可以直接用scanf格式化读入,可以拿部分分,但是如果读入30,格式化输出的是1e 而不是1E,结果区分大小写。
2、如果读入的是0,可以直接输出0,就不会进入while循环转换成16进制了,如果不特判,就会有可能输出空字符。

Ac代码
#include<cstdio>
#include<iostream>

using namespace std;


int main(){
	long long n;
	cin >> n;
	string s;
	s="";
	if(n == 0){
		cout << 0 <<endl;
		return 0;
	}
	while(n){
		int x = n % 16;
		if(x < 10) {
			char xx = x + '0';
			
			s =  xx + s;
		}
		else{
			switch(x){
				case 10 : s = 'A' + s;break;
				case 11 : s = 'B' + s;break;
				case 12 : s = 'C' + s;break;
				case 13 : s = 'D' + s;break;
				case 14 : s = 'E' + s;break;
				case 15 : s = 'F' + s;break;
			}
		}
		n /= 16;
	}
	int flag = 0;
	for(int i = 0; i < s.length();i++){
		if(s[i] !='0') flag = 1;
		if(flag)cout<<s[i];
	}

	
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值