• 有限小数,进制转换,思维


    Contest (nefu.edu.cn)

    Problem:G
    Time Limit:1000ms
    Memory Limit:65535K

    Description

    给定一个 A 进制下的分数 a/b,
    小蓝想把它化为 B 进制下的小数 c。
    现在他想知道这个小数是不是一个有限小数。

    Input

    输入共一行,包含四个数 a, b, A, B,表示该分数和两种进制。
    其中 A, B 使用十进制表示,
    a, b 中大于 9 的数字使用大写字母表示,
    A 表示 10,B 表示 11,以此类推。

    Output

    输出一行,包含一个字符串。
    如果该小数是一个有限小数,则输出 "Yes";
    否则输出 "No"(不包含引号)。

    Sample Input

    10 11 10 11

    Sample Output

    Yes

    Hint

    对于 20% 的评测用例,A = B = 10。
    对于所有评测用例,0 <= a < b <= 10^9, 2 <= A, B <= 36(数为十进制)。

    解析:


    本题需要用到数字逻辑的小数的进制转换知识,举个例子:将0.3转换成2进制小数

    0.3 * 2 = 0.6———————0

    0.6 * 2 = 1.2———————1 

    0.2 * 2 = 0.4———————0 

    0.4 * 2 = 0.  ———————0 

    0.8 * 2 = 1.6———————1 

    0.6 * 2 = 1.2———————1 

    0.2 * 2 = 0.4———————0

    0.4 * 2 = 0.8———————0

     取8位小数的话0.3 = 0.01001100

    转换成B进制只需要将上面的2换成B即可
    这样,将 a/b 转换成B进制只需
    令 Y=a/b
    将 Y*B^k ,k按保留的位数取
    所以这道题我们只需将 k 取得很大,再看最后Y是否为零即可判断出它是否能被b整除,
    这里 a*B^k 可能会很大,所以我们呢可以一边乘一边对 b 取模

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. #include
    10. #include
    11. #include
    12. #include
    13. #include
    14. #include
    15. #include
    16. using namespace std;
    17. typedef long long LL;
    18. const int N = 1e7 + 5;
    19. LL a, b, A, B;
    20. string sa, sb;
    21. LL F(string x) {
    22. LL ret = 0;
    23. int len = x.length();
    24. LL t = 1;
    25. for (int i = len - 1; i >= 0; i--) {
    26. if (x[i] >= '0' && x[i] <= '9') {
    27. ret += (x[i] - '0') * t;
    28. }
    29. else {
    30. ret += (x[i] - 'A' + 10) * t;
    31. }
    32. t *= A;
    33. }
    34. return ret;
    35. }
    36. int main() {
    37. cin >> sa >> sb >> A >> B;
    38. a = F(sa);
    39. b = F(sb);
    40. a %= b;
    41. for (int i = 1; i <= N&&a; i++) {
    42. a *= B;
    43. a %= b;
    44. }
    45. if (a == 0) {
    46. cout << "Yes" << endl;
    47. }
    48. else {
    49. cout << "No" << endl;
    50. }
    51. return 0;
    52. }

  • 相关阅读:
    Geohash相关网址
    pythonUI自动化测试selenium安装使用
    sqlserver连接
    关于读者阅读“改良版雪花算法”后提出的几个共性问题的回复
    【详细教程hexo博客搭建】2、Vercel部署并绑定自定义域名+安装Butterfly主题
    hiberate实体类CURD、事务操作汇总
    CSS学习笔记:Less
    AMBA-CHI协议详解(三)
    Java基础之HashSet和TreeSet
    Linux小知识---CMake的使用
  • 原文地址:https://blog.csdn.net/Landing_on_Mars/article/details/133974949