|
发表于 2017-1-23 09:51:48
|
显示全部楼层
此代码使用matlab编程
Problem26所用时间为0.63431秒
Problem26的答案为983
- %% Problem26
- % 题目26:找出1000以内的数字d,使得1/d拥有最大的循环圈
- function Output=Problem26(Input)
- tic
- if nargin==0
- Input=1000;
- end
- Circle_Max=0;%储存最大的循环圈
- Circle=0;%当前数的循环圈
- R=1;
- r=1;
- Flag=0;
- for ii=1:Input
- R=1;
- r=1;
- while (Flag==0)
- r=mod(r*10,ii);
- if r==0
- Circle=0;%1、r=0表示能除尽,没有循环圈;
- break
- else
- inx=find(r==R);
- if isempty(inx)==0
- %2、看r是否出现在R中,如果出现,表示已完成了循环圈,计算循环圈长度即可;
- Circle=length(R)-length(inx)+1;
- break
- else
- %3、如果r未出现在R中,则把r添加到R,然后继续循环.
- Temp=[R,r];
- R=Temp;
- end
- end
- end
- if Circle>=Circle_Max
- Circle_Max=Circle;
- d=ii;
- end
- end
- Output=d;
- toc
- disp('此代码使用matlab编程')
- disp(['Problem26所用时间为',num2str(toc),'秒'])
- disp(['Problem26的答案为',num2str(Output)])
复制代码 |
|