HDU 2522 求循环小数问题

A simple problem

Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3760 Accepted Submission(s): 1405


Problem Description
Zty很痴迷数学问题.。一天,yifenfei出了个数学题想难倒他,让他回答1 / n。但Zty却回答不了^_^. 请大家编程帮助他.

Input
第一行整数T,表示测试组数。后面T行,每行一个整数 n (1<=|n|<=10^5).

Output
输出1/n. (是循环小数的,只输出第一个循环节).

Sample Input
   
   
   
   
4 2 3 7 168

Sample Output
   
   
   
   
0.5 0.3 0.142857 0.005952380

Author
yifenfei

Source
HDU 2008-10 Programming Contest 

//不知为什么要开到百万  不然就runtime error
#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
using namespace std;
const int N=1000000+10;
bool book[N];
int len,a[N];
bool flag;
int main(){
	int t,n,i;
	scanf("%d",&t);
	while(t--){
	scanf("%d",&n);
	if(n<0)
	 {
	 	n=n*(-1);
	 	flag=0;
	 }
	 else
	   flag=1;
	   
	   if(n==1)
	   {
	   	if(flag)
	   	 printf("1\n");
	   	 else
	   	  printf("-1\n");
	   }
		len=0;
		memset(book,0,sizeof(book));
		int now=1;
		while(now!=0&&book[now]==0){
			book[now]=1;		
			if(now>=n){
				a[len++]=now/n;
				now%=n;
			}
			else
				a[len++]=0;
				
			now*=10;							  		
		}
		if(flag)
		printf("0.");
		else
		  printf("-0.");
		for(i=1;i<len;i++)
		  printf("%d",a[i]);
		printf("\n");
	}
	return 0;
}


你可能感兴趣的:(HDU 2522 求循环小数问题)