你好同学,这道题细看还是跟16进制不太一样,所以考虑的问题还蛮多。
因为输入n=16的时候不是对应于两位16进制即'10',而是对应于一位即'P',所以这个要单独考虑的。下面给个代码供参考:
clc;clear
n = 10000;
letter = 'A':'P';
str = [];
while(n~=0)
s = mod(n,16);
if(s==0)%如果能被16整除,说明这一位肯定是P
str = ['P', str];
n = n - 16;%把16减去剩下的继续计算位次
else
str = [letter(s), str];%如果不能被16整除那么选择相应的位次比如余数s是1那么选取A,s是2那么选取B
end
n = floor(n/16);%每次除以16取整
end
str %str即为所需结果
例子(1)
把第二行改成n=16
,结果:
str =
'P'
例子(2)
把第二行改成n=17
,结果:
str =
'AA'
例子(3)
把第二行改成n=18
,结果:
str =
'AB'
例子(4)
把第二行改成n=33
,结果:
str =
'BA'
例子(5)
把第二行改成n=4000
,结果:
str =
'OIP'
例子(6)
把第二行改成n=10000
,结果:
str =
'BFPP'
可见4000
表示为OIP
,而10000
表示为BFPP
。
function Test()
D = 10000;
Bstr = Fun_dec2A(D)
end
function Bstr = Fun_dec2A(D)
hexStr = dec2hex(D); % 十进制转十六进制
for ii = 1:length( hexStr )
if char( hexStr(ii) ) >= 49 & char( hexStr(ii) ) <= 57
B = char( hexStr(ii) - '1' + 'A' );
elseif hexStr(ii) == '0'
B = '0';
else
B = char( hexStr(ii) + 9 );
end
Bstr(ii) = B;
end
end
结果:
10000 对应 BGA0
4000 对应 OJ0 (欧杰零)