你好,这个自恋数我已经写过代码了:
function main()
[S, R]= nacissistic(16, 3)% 比如这个16进制三位数
end
function [S, R]= nacissistic(base, n)
A = cell(1,n);
[A{:}] = ndgrid(0:base-1);
for i = 1:n
A{1,i} = A{1,i}(:);
end
A = cell2mat(A);%所有可能的n位base进制数
A(A(:,1)==0,:) = [];%去除最高位为0的数
B = sum(A.^n,2);%每个数的位置依次n次方相加,表示成十进制
N = repmat(n-1:-1:0,size(A,1),1);% 幂指标
C = sum(A.*base.^N,2);%每个n位base进制数表示成十进制
p = B==C;
S = C(p,1); % 这个是10进制下的结果
R = A(p,:); % 这个是base进制的行向量,每一行代表一个数,列代表位数
if(base<=36) % 36进制以内都可以用数字字母表示
S = dec2base(S,base,n);
end
end
最后输出结果是:
S =
19×3 char 数组
'EA0'
'5B0'
'8C0'
'EA1'
'5B1'
'8C1'
'173'
'AC3'
'285'
'4A5'
'156'
'208'
'248'
'CA8'
'E69'
'AA9'
'99A'
'60B'
'64B'
R =
14 10 0
5 11 0
8 12 0
14 10 1
5 11 1
8 12 1
1 7 3
10 12 3
2 8 5
4 10 5
1 5 6
2 0 8
2 4 8
12 10 8
14 6 9
10 10 9
9 9 10
6 0 11
6 4 11
可见16进制三位数的自恋数足足有19个
然后改动主函数那一行,改成
[S, R]= nacissistic(10, 3)% 比如这个10进制三位数
结果:
S =
4×3 char 数组
'370'
'371'
'153'
'407'
R =
3 7 0
3 7 1
1 5 3
4 0 7
可见10进制3位数的自恋数有4个,哈哈哈
其他的自己都可以测试哟,有帮助望采纳,谢谢啦