hdu 2522 A simple problem (模拟,求小数循环节)
题意:求一个小数的循环节...
思路:其实直接模拟就好...
模拟竖式计算...
这里用到一个小技巧。
由于多组数据,每次都memset一个bool会很慢,导致超时。
我们可以用一个人int数组来代替每次重置的bool数组,
1/* ***********************************************
2Author :111qqz
3Created Time :Tue 01 Nov 2016 08:00:49 PM CST
4File Name :code/hdu/2522.cpp
5************************************************ */
6#include <cstdio>
7#include <cstring>
8#include <iostream>
9#include <algorithm>
10#include <vector>
11#include <queue>
12#include <set>
13#include <map>
14#include <string>
15#include <cmath>
16#include <cstdlib>
17#include <ctime>
18#define fst first
19#define sec second
20#define lson l,m,rt<<1
21#define rson m+1,r,rt<<1|1
22#define ms(a,x) memset(a,x,sizeof(a))
23typedef long long LL;
24#define pi pair < int ,int >
25#define MP make_pair
26using namespace std;
27const double eps = 1E-8;
28const int dx4[4]={1,0,0,-1};
29const int dy4[4]={0,-1,1,0};
30const int inf = 0x3f3f3f3f;
31const int N=1E6+7;
32int vis[N];
33int n;
34int cnt = 0;
35void solve( int n)
36{
37 if (n<0)
38 {
39 printf("-");
40 n = -n;
41 }
42 if (n==1)
43 {
44 printf("1");
45 return;
46 }
47 int x;
48 printf("0.");
49 for ( x = 10; x ;x*=10)
50 {
51 if (vis[x]==cnt) break;
52 vis[x] = cnt;
53 printf("%d",x/n);
54 x%=n;
55 }
56 puts("");
57}
58int main()
59{
60 #ifndef ONLINE_JUDGE
61 freopen("code/in.txt","r",stdin);
62 #endif
63 int T;
64 scanf("%d",&T);
65 while (T--)
66 {
67 scanf("%d",&n);
68 cnt++;
69 solve(n);
70 }
71 #ifndef ONLINE_JUDGE
72 fclose(stdin);
73 #endif
74 return 0;
75}