请教一下这个问题(刚上手matlab,不太熟)

img

你好同学,这道题细看还是跟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 (欧杰零)