今心laity※ 2021-10-23 16:01 采纳率: 91.7%
浏览 18
已结题

使用MATLAB编写⼀个函数 nacissistic(base,n),⽤于求base进制的n位的⾃恋数

img


编写⼀个函数 nacissistic(base,n),⽤于求base进制的n位的⾃恋数。
– n位⾃恋数指该数各位的n次幂之和等于该数

  • 写回答

1条回答 默认 最新

  • joel_1993 2021-10-23 17:02
    关注

    你好,之前貌似回答过这个问题,我觉得只有我的方法最简单高效:

    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
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月1日
  • 已采纳回答 10月24日
  • 创建了问题 10月23日

悬赏问题

  • ¥15 深度学习残差模块模型
  • ¥20 两个不同Subnet的点对点连接
  • ¥50 怎么判断同步时序逻辑电路和异步时序逻辑电路
  • ¥15 差动电流二次谐波的含量Matlab计算
  • ¥15 Can/caned 总线错误问题,错误显示控制器要发1,结果总线检测到0
  • ¥15 C#如何调用串口数据
  • ¥15 MATLAB与单片机串口通信
  • ¥15 L76k模块的GPS的使用
  • ¥15 请帮我看一看数电项目如何设计
  • ¥23 (标签-bug|关键词-密码错误加密)