|
发表于 2017-1-14 22:07:53
|
显示全部楼层
此代码使用matlab编程
Problem16所用时间为0.034033秒
Problem16的答案为1366
- %题目16:2的1000次方的各位之和是多少?
- function Output=Problem16(Input)
- tic
- if nargin==0
- Input=1000;
- end
- Start=2;
- for ii=1:Input-1
- Temp=Vector_Plus(Start,Start);
- Start=Temp;
- end
- toc
- Output=sum(Start);
- disp('此代码使用matlab编程')
- disp(['Problem16所用时间为',num2str(toc),'秒'])
- disp(['Problem16的答案为',num2str(Output)])
- end
- %% 子程序
- %此程序实现两个向量的加法
- function Output=Vector_Plus(a,b)
- % if nargin==0
- % a=[9 9 9 9 9 9 ];
- % b=[2 0];
- % end
- L1=length(a);
- L2=length(b);
- L=max(L1,L2);
- if L1<L2
- Span=L2-L1;
- Newa=[zeros(1,Span),a];
- Newb=b;
- elseif L1>L2
- Span=L1-L2;
- Newa=a;
- Newb=[zeros(1,Span),b];
- else
- Newa=a;
- Newb=b;
- end
- Rank=Newa+Newb;
- for ii=L:-1:2
- if Rank(ii)>=10
- Rank(ii)=Rank(ii)-10;
- Rank(ii-1)=Rank(ii-1)+1;
- end
- end
- Biggest=0;
- while (Rank(1)>=10)
- if Rank(1)>=10
- Rank(1)=Rank(1)-10;
- Biggest=Biggest+1;
- end
- end
- if Biggest>0
- Output=[Biggest,Rank];
- else
- Output=Rank;
- end
- end
复制代码 |
|