Matlab 编程 Project Euler Problem 20 Factorial digit sum
来源:互联网 发布:cf数据异常23 0 编辑:程序博客网 时间:2024/05/29 10:44
%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位的值
%求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位的值
阅读全文
0 0
- Matlab 编程 Project Euler Problem 20 Factorial digit sum
- Project Euler:Problem 20 Factorial digit sum
- Project Euler Problem 20 Factorial digit sum
- Project Euler 题解 #20 Factorial digit sum
- 20 Factorial digit sum - Project Euler
- project euler 20 Factorial digit sum
- Project Euler 20 Factorial digit sum(大数乘法)
- Project Euler:Problem 74 Digit factorial chains
- Project Euler:Problem 16 Power digit sum
- Project Euler:Problem 56 Powerful digit sum
- Project Euler Problem 16 Power digit sum
- Problem 20:Factorial digit sum
- projecteuler---->problem=20----Factorial digit sum
- Problem 20 Factorial digit sum (阶乘数和)
- Project Euler 16: Power digit sum.
- Project Euler 题解 #16 Power digit sum
- 16 Power digit sum - Project Euler
- project euler 16 Power digit sum
- xampp里的apache与VMware有端口冲突
- 读书笔记_图解HTTP
- Android Selector
- Failed to locate the winutils binary in the hadoop binary path java.io.IOException: Could not locat
- 配对交易启示
- Matlab 编程 Project Euler Problem 20 Factorial digit sum
- Django工具:Git简介与基本操作
- Android selector动态更改字体颜色
- Spring 声明式事务管理----基于AspectJ的XML方式
- uva 1395 Slim Span
- C/C++ 函数指针
- UVA 11419 SAM I AM (最小点覆盖)
- LeetCode习题笔记——Add Two Numbers
- Cookie管理