这是Project Euler的第26题,求1000以内使得倒数具有最长无限循环位的数。
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int res = 0,num = 0;
for(int b = 2;b<1000;b++){
int a = 1;
bool flag = true;
int rm = 0,k=0;
vector<int> rmv;
vector<int> kv;
vector<int>::iterator rt;
while(1){
while(a/b==0){
a*=10;
k++;
}
rm = a%b;
if(rm==0){
flag = false;
break;
}
rt = find(rmv.begin(),rmv.end(),rm);
if(rt!=rmv.end()) break;
rmv.emplace_back(rm);
kv.emplace_back(k);
a = rm;
}
if(flag){
int n = distance(rmv.begin(),rt);
if(k-kv[n]>res) num = b;
res = max(k-kv[n],res);
}
}
cout<<res<<" "<<num<<endl;
return 0;
}