您现在的位置是:首页 > 正文

Matlab 编程 Project Euler Problem 20 Factorial digit sum

2024-02-29 13:18:43阅读 1
%Factorial digit sum_20.m
%求100!结果的所有位值的总和
%方法:通过数组的方式,将结果的每一位分别放置在数组中。
%其中数组是倒序排列的,即第一位是个位,第二位是十位,......


clear all;
close all;
sum_digit=zeros(1,200);  %设置 1 X 200 的数组
sum_digit(1)=1;  %首位数字为1
for i=1:100-1  %由于乘以100的结果不改变求和总值,所以乘到99
    i_ge=rem(i,10);  %乘数的个位
    i_shi=floor(i/10);  %乘数的十位
    if(i_shi==0)  %若十位为0
        sum_digit=sum_digit.*i;  %矩阵的点乘
        %若数组中存在大于9的数,则进位
        for j=1:length(sum_digit)  
            if(sum_digit(j)>9)
                %sum_digit(j+2)=sum_digit(j+2)+floor(sum_digit(j)/100);
                sum_digit(j+1)= sum_digit(j+1)+rem(floor(sum_digit(j)/10),10);
                sum_digit(j)=rem(sum_digit(j),10);
            end
        end
    %若i_shi>0
    else
        sum_digit_ge=sum_digit.*i_ge;  % i 的个位
        %若数组中存在大于9的数,则进位
        for j=1:length(sum_digit_ge)
            if(sum_digit_ge(j)>9)
                %sum_digit_ge(j+2)=sum_digit_ge(j+2)+floor(sum_digit_ge(j)/100);
                sum_digit_ge(j+1)= sum_digit_ge(j+1)+rem(floor(sum_digit_ge(j)/10),10);
                sum_digit_ge(j)=rem(sum_digit_ge(j),10);
            end
        end
        sum_digit_shi=sum_digit.*i_shi;  % i 的十位
        %若数组中存在大于9的数,则进位
        for j=1:length(sum_digit_shi)
            if(sum_digit_shi(j)>9)
                %sum_digit_shi(j+2)=sum_digit_shi(j+2)+floor(sum_digit_shi(j)/100);
                sum_digit_shi(j+1)= sum_digit_shi(j+1)+rem(floor(sum_digit_shi(j)/10),10);
                sum_digit_shi(j)=rem(sum_digit_shi(j),10);
            end
        end
        %将 i 个位和十位分别与sum_digit相乘后的值按位相加
        sum_digit(1)=sum_digit_ge(1);
        for k=2:length(sum_digit)-1
            sum_digit(k)=sum_digit_shi(k-1)+sum_digit_ge(k);
        end
        %若数组中存在大于9的数,则进位
        for j=1:length(sum_digit)
            if(sum_digit(j)>9)
                %sum_digit(j+2)=sum_digit(j+2)+floor(sum_digit(j)/100);
                sum_digit(j+1)= sum_digit(j+1)+rem(floor(sum_digit(j)/10),10);
                sum_digit(j)=rem(sum_digit(j),10);
            end
        end
    end
end
sum_num=sum(sum_digit);  %求和
disp(sum_num)  %显示
disp(sum_digit(1:200))%显示前200位的值



网站文章

  • 单链表 反转链表

    单链表 反转链表

    从键盘输入n个数字(n < 100),组成一个链表。将此链表反序之后输出。

    2024-02-29 13:18:35
  • 【Mac】mac系统上传文件到Linux服务器

    3. 选择安全文件传输sftp,点击右边服务器下的加号添加你要连接的远程服务器ip地址。4. 选中服务器,输入服务器对应的用户名,点击连接。7 再进入本地要上传的目录,本地命令前面加个 l。执行put -r 文件名称,将本地文件上传到远端。6. 先进入到远程服务器目录。1. 打开mac自带终端。5.输入密码,连接成功。2. 链接远程服务器。

    2024-02-29 13:18:06
  • 基本数据类型(如:int) 不属于object的子类为啥还能赋值给object呢?

    基本数据类型(如:int) 不属于object的子类为啥还能赋值给object呢?

    基本数据类型(如:int) 不属于object的子类为啥还能赋值给object呢?

    2024-02-29 13:17:58
  • AM使用指南之三:如何在Managed Bean中获取AM实例?

    AM使用指南之三:如何在Managed Bean中获取AM实例?

    AM是放置服务方法的地方,有时我们需要在Managed Bean中调用这些方法。要调用这些方法,首先要在Managed Bean中获取AM实例。这里要用到《ADF工具类:ADFUtil.java 源代码 》。1. 获取默认的AM实例如果Model项目中只有一个AM,可以这样获取:ApplicationModule am = ADFUtils.getDCBindingCo

    2024-02-29 13:17:52
  • 第24章:事务基础知识

    第24章:事务基础知识

    在事务中某个操作失败,系统撤销当前的事务,返回事务之前的状态。事务B也过来更新,事务A覆盖了事务B更新的数据,这就是脏写。当一个事务进行多个操作,所有事务提交commit,修改永久保存下来。事务A在读...

    2024-02-29 13:17:25
  • 【烈日炎炎战后端】MySQL编程(3.6万字)

    【烈日炎炎战后端】MySQL编程(3.6万字)

    这里写目录标题1.模式定义与删除1.1 定义模式1.2 模式删除2. 基本表操作2.1 定义基本表2.2 修改基本表2.3 删除基本表2.4索引的建立与删除3.数据查询3.1 单表查询:仅涉及一个表的...

    2024-02-29 13:17:18
  • kubernetes常用命令汇总

    kubectl命令行管理工具 基础命令 create 通过文件名或标准输入创建资源 expose 为Deployment,Pod创建service run 在集群中运行一个特定的镜像 set 在对象上设置特定的功能 explain 文档参考资料 get 显示一个或多个资源 edit 使用系统编辑器编辑一个资源 delete 通过文件名、标准输入、资源名或标签选择器来删除资源

    2024-02-29 13:17:11
  • 埋点数据

    埋点数据

    原文源自:http://www.woshipm.com/pmd/751876.html 本文作者将从一个埋点系统设计者的角度通俗系统地讲解埋点的全过程,涉及到埋点基础知识、埋点作用、埋点方法、埋点数据流程、埋点应用、埋点管理等信息。 埋点是什么 埋点是互联网领域非常重要的数据信息获取方式。埋点采集信息的过程一般也称作日志采集。 通俗点讲,就是在APP或者web产品中植入一段代...

    2024-02-29 13:17:03
  • Javascript中call() apply() bind()和argument

    call() apply() bind() call():传入一个对象,参数以逗号间隔 obj.call(obj2,“hello”,2) applyl():传入一个对象,参数以数组形式传入 obj.a...

    2024-02-29 13:16:34
  • 不上班的 613 天

    不上班的 613 天

    人生充满了随机性,很多事情都不在我们的计划之中。 比如此刻的我,于 2020 年的情人节,坐在苏黎世联邦理工学院(ETH),回顾着从离职到现在的 613 天,准备写下这段时间的经历和感受。今天既不是旧一年的结束,也不是新一年的开始,从我完成的事情来看,也并没有到达一个值得写篇恢宏长文以纪念的里程碑。决定坐下来开始写这样一篇文章,仅仅是因为某位...

    2024-02-29 13:16:27