标签:
题目:给你一个分数的分子和分母,求出他的循环节。
分析:模拟。根据鸽巢原理,设分母为m则计算中最多有m中不同的余数,所以循环节小于m。
说明:每次记录余数*10在取新的余数即可。
#include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #include <cmath> using namespace std; int n,m; int save[1001]; int used[1001]; int first[1001]; int main() { while (~scanf("%d%d",&n,&m) && n+m) { memset(used, 0, sizeof(used)); int count = 0; while (!used[n] && n) { used[n] = 1; save[count] = 10*n/m; first[n] = count ++; n = 10*n%m; } printf("."); for (int i = 0; i < count; ++ i) { if (i%50 == 49) printf("\n"); printf("%d",save[i]); } if (!n) printf("\nThis expansion terminates.\n\n"); else printf("\nThe last %d digits repeat forever.\n\n",count-first[n]); } return 0; }
标签:
原文地址:http://blog.csdn.net/mobius_strip/article/details/45361343