关于蓝桥杯练习测试系统: 基础练习 十进制转十六进制

关于蓝桥杯练习测试系统: 基础练习 十进制转十六进制

试题 基础练习 十进制转十六进制

资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
  十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
  给出一个非负整数,将它表示成十六进制的形式。
输入格式
  输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647
输出格式
  输出这个整数的16进制表示
样例输入
30
样例输出
1E

通过了样例测试,怎么还有两组数据失败啊,求大佬指正

代码如下:

#include
using namespace std;
string trans(int c)
{
switch©
{
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()
{
int t;
cin>>t;
int left[10];
string sixteen;
int index=0;
if(t<0)
{
abort();
}
else if(t<16)
{
sixteen+=trans(t);
cout<<sixteen<<endl;
exit(0);
}
else if(t==16)
{
sixteen+=“10”;
cout<<sixteen<<endl;
exit(0);
}
while(t>16)
{
left[index++]=t % 16;
t=t / 16;
}

for(int i=index-1;i>=0;i--)
{
	sixteen+=trans(left[i]);
	
}
sixteen=trans(t)+sixteen;
cout<<sixteen<<endl;
return 0;

}

更新
找到问题所在了,当测试数据为16的n倍(n>=2)
在t>16那里的判断条件,将t递归之后无法进入循环导致错误
改进:
将t>16变成t>=16之后就可以了
这样16也能进入循环

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值