posts - 99,  comments - 8,  trackbacks - 0

//这个题目如果理解了除法的机制就简单,对于这种 1 / n 的除法因为每次都是用模的10倍去除以除数,
//所以如果出现了模相同必将意味着出现循环节,所以这里用一个标记数组来跳出循环
//这里很容易忽略负数,同时特殊的数  1 的处理

//忘了把最开始的temp = 1 标记为 true  所以WA 了  

#include <iostream>
#include 
<string>
using namespace std;

int main ()
{
    
int t, n;
    
int mark[100001];
    
int res[100001]; 
    
while ( scanf ("%d"&t )  != EOF )
    
{
          
for ( int i = 0; i < t; i ++ )
          
{
              scanf ( 
"%d"&n );
              
if ( n < 0 )
              
{
                   printf (
"-");
                   n 
= -n;
              }

              
              
if ( n == 1 )
              
{
                    printf (
"1\n ");
                    
continue;
              }

                           
              memset ( mark, 
falsesizeof (mark) );
              memset ( res, 
falsesizeof (mark) );
              
int temp = 1;       //最先的模是 1 
              mark [ temp ] = true
              
int cnt = 0;
              
while ( temp )
              
{
                    temp 
*= 10;
                    res[cnt 
++= temp / n;
                    temp 
%= n;
                    
if ( mark[temp] )
                       
break;
                    mark[temp] 
= true;
              }
 
              printf (
"0.");
              
for ( int i = 0; i < cnt; i ++ )
              
{
                  printf (
"%d", res[i]);
              }

              printf (
"\n");
          }

    }
    

    
// system ("pause");
     return 0;
}

posted on 2010-08-28 15:10 雪黛依梦 阅读(456) 评论(0)  编辑 收藏 引用 所属分类: 哈希法

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(4)

随笔分类

随笔档案

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜