题意:输出1/n. (是循环小数的,只输出第一个循环节).
思路:除法的性质,商等于被除数整除除数的结果加上,被除数对除数取余的余数除以除数的结果。所以如果余数出现重复就表示有循环节。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <queue>
#include <stack>
#include <algorithm>
#include <cstring>
#include <utility>
#define ll long long
#define INF 0x3f3f3f3f
using namespace std;
int a[100005];
void div(int x)
{
int d=1;
a[1]=1;
while(d)
{
d*=10;
printf("%d",d/x);
d%=x;
if(a[d]) //余数重复出现的话,就出现循环节了
break;
a[d]=1;
}
}
int main()
{
int t,n;
cin>>t;
while(t--)
{
scanf("%d",&n);
memset(a,0,sizeof(a));
if(n<0) //注意负数
{
printf("-");
n=-n;
}
if(n==1) //注意特殊情况
{
printf("1\n");
continue;
}
printf("0.");
div(n);
printf("\n");
}
return 0;
}