FOJ 1846 Circulator

FOJ 1846 Circulator

真是个讨厌的题目,输出及其猥琐。其他的点评,没了。

#include < iostream >
#include
< cmath >
using   namespace  std;
const   int  maxn = 100020 ;

int  v[maxn];
int  order[maxn];
int  ans[maxn]; // 存放结果

int  solve( int  n, int  m, int   & pos)
{
    memset(order,
0,sizeof(order));
    memset(v,
0,sizeof(v));
    
int f=0;
    
int cnt=0;
    v[n]
=1;n*=10;
    
while(n)
    
{
        
if(v[n%m]==1)
        
{
            f
=1;ans[++cnt]=n/m;n%=m;
            
break;
        }

        
else v[n%m]=1;
        ans[
++cnt]=n/m;
        n
%=m;
        order[n]
=cnt;
        n
*=10;
    }

    
if(f==0)
        pos
=-1;
    
else pos=order[n];
    
return cnt;
}


int   get ( int  n)
{
    
return log((double)n);
}


int  main()
{

    
int n,m;
    
while(scanf("%d%d",&n,&m)!=EOF)
    
{
        
int cnt;
        
int pos;
        
if(n%m==0)
        
{
            printf(
"%d.0\n",n/m);
            
continue;
        }

        
int zhengshu=n/m;
        n
%=m;
        
int len=solve(n,m,pos);
        
if(zhengshu!=0)
             cnt
=get(zhengshu)+1;
        
else 
            cnt
=2;
        
if(pos==-1)
        
{
            printf(
"%d.",zhengshu);
            
for(int i=1;i<=len;i++)
            
{
                printf(
"%d",ans[i]);
                cnt
++;
                
if(cnt%76==0)
                    printf(
"\n");
            }

            
if(cnt%76!=0)
                printf(
"\n");

            
        }

        
else
        
{
            printf(
"%d.",zhengshu);
            
for(int i=1;i<=pos;i++)
            
{
                printf(
"%d",ans[i]);
                cnt
++;
                
if(cnt%76==0)
                    printf(
"\n");

            }

            printf(
"(");
            cnt
++;
            
if(cnt%76==0)
                printf(
"\n");
            
for(int i=pos+1;i<=len;i++)
            
{
                printf(
"%d",ans[i]);
                cnt
++;
                
if(cnt%76==0)
                    printf(
"\n");
            }

            printf(
")");
            cnt
++;
            
if(cnt%76==0)
                printf(
"\n");
            
if(cnt%76!=0)
                printf(
"\n");
        }

    }

    
return 0;
}

你可能感兴趣的:(FOJ 1846 Circulator)