循环小数(Repeating Decimals, ACM/ICPC World Finals 1990, UVa202)rust解法

输入整数a和b(0≤a≤3000,1≤b≤3000),输出a/b的循环小数表示以及循环节长度。例如a=5,b=43,小数表示为0.(116279069767441860465),循环节长度为21。

样例

复制代码
1 59
0.(01694915254237288135593220338983050847457627118644...) 58
1 397
0.(00251889168765743073047858942065491183879093198992...) 99

解法

就是模拟竖式除法

rust 复制代码
use std::{collections::HashMap, io};

fn main() {
    let mut buf = String::new();
    io::stdin().read_line(&mut buf).unwrap();
    let mut it = buf.split_whitespace();
    let a: u32 = it.next().unwrap().parse().unwrap();
    let b: u32 = it.next().unwrap().parse().unwrap();

    if a % b == 0 {
        println!("{}.(0) {}", a / b, 1);
        return;
    }
    let mut m = a % b;
    let n = b;
    let mut r = 0;
    let mut ans = String::from(".");
    let mut kv = HashMap::new(); //记录被除数在第几个次上商时出现过
    loop {
        m *= 10; //产生新被除数
        if kv.contains_key(&m) {
            //同一个被除数出现第二次
            let pos = kv.get(&m).unwrap();
            r = ans.len() - pos; // 循环节长度
            if r > 50 {
                ans.drain(pos + 50..);//删除后面超出50长度的字符
                ans.push_str("...")
            }
            ans.insert(*pos, '('); //在第一次出现此被除数的上商位置插入'('
            ans.push(')');
            break;
        } else {
            kv.insert(m, ans.len());
            ans += &(m / n).to_string(); //上商
            m = m % n;
            if m == 0 {
                //如果发现被除数为0,则直接在ans后加上(0)即可
                ans.push_str("(0)");
                r = 1;
                break;
            }
        }
    }
    println!("{}{} {}", a / b, ans, r);
}
相关推荐
郝学胜-神的一滴10 小时前
超越Spring的Summer(一): PackageScanner 类实现原理详解
java·服务器·开发语言·后端·spring·软件构建
摇滚侠10 小时前
Java,举例说明,函数式接口,函数式接口实现类,通过匿名内部类实现函数式接口,通过 Lambda 表达式实现函数式接口,演变的过程
java·开发语言·python
阿里嘎多学长10 小时前
2026-02-03 GitHub 热点项目精选
开发语言·程序员·github·代码托管
Tony Bai10 小时前
“Go 2,请不要发生!”:如果 Go 变成了“缝合怪”,你还会爱它吗?
开发语言·后端·golang
打工的小王10 小时前
java并发编程(七)ReentrantReadWriteLock
java·开发语言
lang2015092810 小时前
Java并发革命:JSR-133深度解析
java·开发语言
禹凕10 小时前
Python编程——进阶知识(面向对象编程OOP)
开发语言·python
abluckyboy10 小时前
基于 Java Socket 实现多人聊天室系统(附完整源码)
java·开发语言
毅炼10 小时前
Java 基础常见问题总结(3)
java·开发语言
m0_7482299910 小时前
PHP简易聊天室开发指南
开发语言·php