本文共 1251 字,大约阅读时间需要 4 分钟。
#include #include #include #include #include #include #include #include #include #include using namespace std; #define MM(a) memset(a,0,sizeof(a)) typedef long long ll; typedef unsigned long long ULL; const int mod = 1000000007; const double eps = 1e-10; const int inf = 0x3f3f3f3f; long long gcd(long long a, long long b) { if (b == 0) return a; else return gcd(b, a%b); } long long pow_2(long long a, long long b) { long long temp = b, res = 1,p=a; while (temp) { if (temp & 1) res *= p; p = p*p; temp >>= 1; } return res; }//其实可以不需要快速幂,,直接对10进行累乘就好 int main() { char s[1000]; while (~scanf("%s", s)) { if (s[1] != '.') return 0; long long all = 0, i, num = 0, n, ansc,ansz=inf,ansm=inf, temp; for (i = 2; s[i] != '.'; i++); n = i - 2; for (int j = 2; j <= i - 1; j++) all = all * 10 + s[j] - '0'; for (int k = 1; k <= n; k++) { num = all / (pow_2(10,k)); long long fenmu = pow_2(10, n) - pow_2(10, n - k); long long fenzi = all - num; long long c = gcd(fenzi, fenmu); if (fenmu / c < ansm) { ansz = fenzi / c; ansm = fenmu / c; } } printf("%lld/%lld\n",ansz, ansm ); } return 0; }
转载地址:http://tvgsi.baihongyu.com/