SGU_CONTEST30_B(Headstrong Student)


求小数的循环节长度

 1  //  B  .CPP_VS Accepted 224 ms 4035 kb 
 2 
 3  #include  < stdio.h >
 4  #include  < iostream >
 5  using   namespace  std ;
 6 
 7  const   int  size  =   1100000  ;
 8  int  flag[size] ;
 9 
10  int  ina, inb ;
11 
12  int  main()
13  {
14       while ( cin  >>  ina  >>  inb )
15      {
16           if ( ina  %  inb  ==   0  )
17          {
18              printf(  " 0 0\n "  ) ;
19               continue  ;
20          }
21 
22          memset( flag,  0 sizeof (flag) ) ;
23 
24          ina  =  ina  %  inb ;
25           int  outa  =   0  ;  int  outb  =   0  ;
26           int  x  =   0  ;
27          
28           while ( ina  <  inb )
29          {
30              flag[ina]  =   1  ;
31              ina  =  ina  *   10  ;
32              outa  =  outa  +   1  ;
33               // flag[ina] = 1 ;
34          }
35          outa  =  outa  -   1  ;
36 
37           while true  )
38          {
39               if ( flag[x] )  break  ;
40 
41              flag[x]  =   1  ;
42              x  =  ina  %  inb ;
43               // flag[x] = 1 ;
44              outa  =  outa  +   1  ;
45              ina  =  x  *   10  ;
46          }
47 
48          memset( flag,  0 sizeof (flag) ) ;
49          flag[x]  =   1  ;
50 
51          ina  =  x  *   10  ;
52          x  =   0  ;
53           while true  )
54          {
55               if ( flag[x] )  break  ;
56 
57              flag[x]  =   1  ;
58              x  =  ina  %  inb ;
59               // flag[x] = 1 ;
60              outb  ++  ;
61              ina  =  x  *   10  ;
62          }
63 
64          printf(  " %d %d\n " , outa - outb, outb ) ;
65      }
66       return   0  ;
67  }

你可能感兴趣的:(SGU_CONTEST30_B(Headstrong Student))