3-循环节长度

xiaoxiao2021-02-28  31

问题描述:

两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。

比如,11/13=0.846153846153\ldots11/13=0.846153846153 其循环节为846153共有 6 位。

代码框中的代码可以求出循环节的长度,把空缺的代码填好。

样例输入

11 13

样例输出

6

代码及解析:

#include <iostream> #include <algorithm>//一些常用算法STL #include <vector>//动态数组STL using namespace std; //函数f:对被除数n与除数m的处理 int f(int n, int m) { //11 //n==0 n = n % m;//得到余数 vector<int> v;//构建int类型的动态数组v for(;;) { //for语句不加任何限制,不断循环,一定会有结果出现 v.push_back(n);//在数组最后添加余数:11-6-8-2-7-5---11-6-8-2-7-5 n *= 10;//想想自己作除法 n = n % m;//是如何获得余数的 //现在n值为 6 if (n == 0) return 0;//如果余数仍然为0,则长度为0 //find:相当于一个指针,从v这个动态数组的开头查找第一次出现n这个目标字符串,一直查到数组尾部 // //因为是动态数组,它的大小不断发生变化 //cout<<v.size()<<endl; // //动态数组值为11 n=6 find(begin,end,6)==end size=1 //动态数组值为11-6 n=8 find(begin,end,8)==end size=2 //动态数组值为11-6-8 n=2 find(begin,end,2)==end size=3 //动态数组值为11-6-8-2 n=7 find(begin,end,7)==end size=4 //动态数组值为11-6-8-2-7 n=5 find(begin,end,5)==end size=5 //动态数组值为11-6-8-2-7-5 n=11 find(begin,end,11)!=end size=6 if (find(v.begin(), v.end(), n) != v.end()) { // 在下面填入代码,这个代码主要计算循环节长度的 /*可以查看值:使用迭代器访问元素 vector<int>::iterator it; for(it=v.begin();it!=v.end();it++) cout<<*it<<" "<<v.size()<<endl; cout<<endl; cout<<*find(v.begin(), v.end(), n)<<endl;#0 */ return v.size() - (find(v.begin(), v.end(), n) - v.begin()); // 7-(1-0)=6 //返回值为6 } } } int main() { int n, m; cin >> n >> m; cout << f(n, m) << endl; return 0; }

转载请注明原文地址: https://www.6miu.com/read-2626943.html

最新回复(0)