【蓝桥杯】循环节长度

题目如下:

循环节长度

两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。
比如,11/13=6=>0.846153846153.....  其循环节为[846153] 共有6位。
下面的方法,可以求出循环节的长度

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
int f(int n,int m ){
    n = n % m;
    vector<int> v;
    for(;;){
        v.push_back(n);
        n *= 10;
        n = n % m;
        if(n == 0)
            return 0;
        if(find(v.begin(),v.end(),n)!=v.end()){
            return v.end() - find(v.begin(),v.end(),n);
        }
    }
}
int main()
{
    int n,m;
    cin >> n >> m;
    cout << f(n,m) << endl;

    return 0;
}

一、std::find()

用法:find(first, end, value);

find()在begin和end之间找n,返回区间[first,end)中第一个值等于value的元素位置;若未找到,返回end。函数返回的是迭代器或指针,即位置信息。

二、std::find_if()

用法:find_if(first, end, bool pred);

返回区间[first,end)中使一元判断式pred为true的第一个元素位置;若未找到,返回end。

三、std::find_first_of()

用法:find_first_of(first1, end1, first2, end2);

 返回第一个区间迭代器位置,满足第一个区间[first1,end1)中的元素第一次出现在第二个区间[first2,end2)中。

通俗就是说顺序从第一个区间[first1,end1)中取一个元素,在第二个区间中找有没有相同的元素,如果有就返回第一个区间中元素位置;未找到则继续

用第一个区间的下一个元素在第二个区间找。

因此只要保证两个区间内的元素可以==即可,不用管装元素的容器形式。下面的例子我第一个区间用的vector、而第二个区间是list也是可以的。

发布了38 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41514794/article/details/103964134