除法的本质,模拟除法的过程即可;
中间用一个数组保存出现过的余数,若同一个余数出现俩次,则出现了循环节;
考虑可能出现负数;
#include<stdio.h> #include<string.h> int f[100000]; int hash[100000]; int main() { int t,m,y,cnt,n,i; scanf("%d",&t); while(t--) { scanf("%d",&n); if(n<0) { printf("-"); n*=-1; } if(n==1) { printf("1\n"); continue; } y=1;cnt=0; memset(hash,0,sizeof(hash)); hash[1]=1; while(y) { y*=10; f[cnt++]=y/n; y%=n; if(hash[y])//重复出现同一个余数,即存在了循环节 break; hash[y]=1; } printf("0."); for(i=0;i<cnt;i++) printf("%d",f[i]); printf("\n"); } return 0; }