UVA - 202 Repeating Decimals
2015-06-16 07:10
309 查看
//
后面的模数和前面相等的时候就循环了 注意状态开始的地方
//
后面的模数和前面相等的时候就循环了 注意状态开始的地方
//
#include<iostream> #include<cstdio> #include<string.h> using namespace std; const int maxn = 10000; int vis[maxn+5]; int res[maxn+5]; int main() { int n, m; while(scanf("%d%d", &n, &m) != EOF) { memset(vis,0,sizeof(vis)); memset(res,0,sizeof(res)); printf("%d/%d = %d.",n, m, n/m); n %= m; if(n==0) { cout << "(0)" << endl; cout << " 1 = number of digits in repeating cycle" << endl; cout << "\n"; continue; } int s, t; bool ok = false; for(int i = 1; i < maxn; ++i) { if(!res[n%m]) { res[n%m] = i; n*=10; vis[i] = n/m; n%=m; } else { s = res[n%m]; t = i; break; } } for(int i = 1; i < s; ++i) cout << vis[i]; cout << "("; for(int i = s; i < s+50 && i < t; ++i) cout << vis[i]; if(t-s>50) cout << "..."; cout << ")" << endl; printf(" %d = number of digits in repeating cycle\n\n", t - s); } return 0; }
相关文章推荐