循环节

循环节

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
 
int f(int n, int m)
{
	n = n % m;
	//小数位数不定故采用vector容器存储余数 
	vector<int> v;
 
	for (;;)
	{
		v.push_back(n);
		n *= 10;
		n = n % m;
		if (n == 0) return 0;
		//find返回迭代器,返回找到的第一个位置,找不到则返回v.end(),v.end()为结尾空,其前一位为最后一个元素,v.begin()为第一个元素的位置【相当于数组下标0】
		/*注意考虑类似7/18=0.388888888的情况,此类情况下find不在数组下标0处,循环节长度必为1,
		故需将向量长度减去find的位置和v.begin()之差【下标相当于从0开始计算】,其余情况find位置必然等于begin*/
		if (find(v.begin(),v.end(),n)!= v.end())  
			return int(v.size() - (find(v.begin(), v.end(), n) - v.begin())); 
		/*或int(v.end() - find(v.begin(), v.end(), n))此时考虑的是7/18=0.388888888的情况下end位置和find位置必然相邻
		,即相差1,也就是循环节长度;其余情况find等于begin即v.end()-v.begin()也就是v.size()*/ 
	}
	//以上两种写法实际上等价,因为v.size()=v.end()-v.begin() 
}
 
int main() {
	for(int i=1;i<1000;i++){
		for(int j=1;j<1000;j++){
			int ret=f(i,j);
			if(ret>50){
				printf("i= %d,j=%d,ret=%d\n",i,j,ret);
			}
		}
	} 
}

输出循环节

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int b[105],c[105];
bool p1;
int main()
{
    int i,j,j1,j2,p,q;
    cin>>q>>p;j=1;p1=true;b[j]=q;j1=0;
    while(q>0 && p1)
    {
        j1++;c[j1]=q*10/p;q=q*10-c[j1]*p;
        if(q>0)
        {
            j2=1;
            while(b[j2]!=q && j2<=j) j2++;
            if(b[j2]==q)
            {
                p1=false;cout<<"0.";
                for(i=1;i<j2-1;i++) cout<<c[i];
                cout<<'{';
                for(i=j2;i<=j1;i++) cout<<c[i];
                cout<<'}';
            }
            else    { j++;b[j]=q;}
        }
        if(q==0)
        {
            cout<<"0.";
            for(i=1;i<=j1;i++) cout<<c[i];
            cout<<endl;
        }
    }
    return 0;
}

参考
https://blog.csdn.net/m0_60287040/article/details/122698384?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-2-122698384-blog-102923907.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-2-122698384-blog-102923907.pc_relevant_aa&utm_relevant_index=3

posted @ 2022-08-20 10:17  new-code  阅读(93)  评论(0)    收藏  举报