编写⼀个函数 nacissistic(base,n),⽤于求base进制的n位的⾃恋数。
– n位⾃恋数指该数各位的n次幂之和等于该数
你好,之前貌似回答过这个问题,我觉得只有我的方法最简单高效:
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, R]= nacissistic(16, 3)
结果
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