好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。
知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好)
此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。
按照除法的机制,用一个函数表示出来就可以了,代码如下:
#include<iostream>
#include<algorithm>
#include<string>
#include<stack>
#include<queue>
#include<map>
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<time.h>
#include<math.h>
#define eps 1e-9
#define N 100005
#define P system("pause")
using namespace std;
int hash[N];
void div(int x)
{
int left=1;
hash[1]=1;
while(left)
{
left*=10;
printf("%d",left/x);
left%=x;
if(hash[left]) break;
hash[left]=1;
}
}
int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);cc
int n,x;
scanf("%d",&n);
while(n--){
scanf("%d",&x);
if(x==1) {printf("1\n");continue;}
if(x<0) {printf("-");x = 0-x;}
printf("0.");
memset(hash,0,sizeof(hash));
div(x);
printf("\n");
}
// P;
return 0;
}