循环小数(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);
}
相关推荐
背帆3 分钟前
go的interface接口底层实现
开发语言·后端·golang
小屁孩大帅-杨一凡14 分钟前
一个简单点的js的h5页面实现地铁快跑的小游戏
开发语言·前端·javascript·css·html
顾子茵23 分钟前
c++从入门到精通(四)--动态内存,模板与泛型编程
java·开发语言·c++
电信2301杨臣39 分钟前
QT---信号与槽
开发语言·qt
明月看潮生1 小时前
青少年编程与数学 02-019 Rust 编程基础 07课题、字符串
开发语言·青少年编程·rust·编程与数学
抽风的雨6101 小时前
【python基础知识】Day26 函数
开发语言·python
IT成长史1 小时前
deepseek梳理java高级开发工程师springboot面试题2
java·spring boot·后端
qq_266348731 小时前
springboot AOP中,通过解析SpEL 表达式动态获取参数值
java·spring boot·后端
编程有点难1 小时前
Python训练打卡Day22
开发语言·python·机器学习
bing_1582 小时前
MQTT 在Spring Boot 中的使用
java·spring boot·后端·mqtt