分数的值

分数的值

 

Problem Description

输入一个以N/D(0<=N<=65535,0<=D<=65535)形式的分数,其中N为分子,D为分母,输出它的小数形式(运算结果小数点后最多保留100位)。假如它的小数形式存在循环节,要将其用括号括起来。例如:1/3=0.33333...表示为.(3),又如41/333=0.123123123...表示为0.(123)。

Input

每行2个用空格分开的整数N和D

Output

每行输出一个结果

Sample Input

1 3
22 5
1 7

Sample Output

1/3=0.(3)
22/5=4.4
1/7=0.(142857)

解释:

这是一个数学题吧,模拟数学的计算过程。对于N / D,每一次都可以得到一个商和一个余数,如果一个余数出现两次,那么就是循环一个循环小数。题目有说明,最多只输出100位。既然要判断一个数有没有出现两次呢,有一种办法就是用一个数组下标来记录,例如flag[i]=1  就是表示数 i 出现了1次,这个题呢,D <= 65535, 感觉不是很大,可以开辟这么大的数组。但好像没有必要,毕竟只会用到100个,多余的6W多空间会被浪费。可以考虑用map,set等数据结构来保存。

 1 #include<bits/stdc++.h>
 2 
 3 using namespace std;
 4 const int N = 101;
 5 
 6 int remaind[N]; // 余数
 7 int integ[N]; // 整数
 8 bool flag_integ[65536];
 9 
10 int main()
11 {
12     int n, d;
13     while (cin >> n >> d){
14         memset(remaind, 0, sizeof(remaind));
15         memset(integ, 0, sizeof(integ));
16         memset(flag_integ, 0, sizeof(flag_integ));
17         int cnt = 0;
18         
19         integ[cnt] = n/d;
20         flag_integ[n] = 1;
21         remaind[cnt] = n % d;
22         flag_integ[remaind[cnt]] = 1;
23 
24         cnt++;
25         int flag = 0;
26         while (cnt <= 100 && remaind[cnt-1] != 0) {
27 
28             integ[cnt] = (remaind[cnt-1] * 10) / d;
29             remaind[cnt] = (remaind[cnt-1] * 10) % d;
30 
31             if (remaind[cnt] == 0) break;
32             if (flag_integ[remaind[cnt]]) {
33                 flag = 1; break;
34             }
35 
36             flag_integ[remaind[cnt]] = 1;
37             cnt++;
38         }
39 
40         if (flag){
41             printf("%d/%d=%d.(", n, d, integ[0]);
42             for (int i = 1; i <= cnt; i++){
43                 printf("%d", integ[i]);
44             }
45             printf(")\n");
46         } else {
47             printf("%d/%d=%d.", n, d, integ[0]);
48             for (int i = 1; i <= cnt; i++) {
49                 printf("%d", integ[i]);
50             }
51             printf("\n");
52         }
53 
54 
55     }
56     return 0;
57 }
View Code

我没有用那些数据结构的原因是,我比较懒,用数组保存就很快,写代码很快。懒得扣jio,贼懒

posted @ 2019-07-18 14:52  龚政  阅读(412)  评论(0编辑  收藏  举报