今心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 Llama如何调用shell或者Python
  • ¥20 eclipse连接sap后代码跑出来空白
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?
  • ¥15 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)
  • ¥65 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案