题目:http://acm.hdu.edu.cn/showproblem.php?pid=2522
AC代码(C++):
#include <iostream> #include <queue> #include <set> #include <string> #include <algorithm> #include <string.h> #include <math.h> #define INF 0x3f3f3f3f #define eps 1e-8 typedef unsigned long long ULL; using namespace std; bool vis[100005]; int main() { int t; cin >> t; while (t--) { int n, x, y; cin >> n; if (n < 0) { cout << "-"; n = -n; } if (n == 1) { cout << "1" << endl; continue; } cout << "0."; memset(vis, false, sizeof(vis)); vis[1] = true; x = 10; while (x!=0) { y = x / n; x = x % n; if (vis[x]) { cout << y; break; } vis[x] = true; cout << y; x *= 10; } cout << endl; } //system("pause"); }总结: 模拟题. 按照笔算除法的方法一步一步算, 当余数重复出现时说明出现了循环体. 有两个坑, 一个是n可以为负数, 一个是当|n|为1时直接输出1.