产品展示型网站有哪些,免费建站的方法,怎么看网站是什么程序,服务器租用免费试用输入整数a和b#xff08;0≤a≤3000#xff0c;1≤b≤3000#xff09;#xff0c;输出a/b的循环小数表示以及循环节长度。例如a5#xff0c;b43#xff0c;小数表示为0.(116279069767441860465)#xff0c;循环节长度为21。
解法 就是模拟竖式除法
use std::{collecti…输入整数a和b0≤a≤30001≤b≤3000输出a/b的循环小数表示以及循环节长度。例如a5b43小数表示为0.(116279069767441860465)循环节长度为21。
解法 就是模拟竖式除法
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 ans[0..pos 50].to_string();ans.push_str(...)}ans.insert(*pos, (); //在第一次出现此被除数的上商位置插入(ans.push());break;} else {kv.insert(m, ans.len());ans.push_str((m / n).to_string().as_str()); //上商m m % n;if m 0 {//如果发现被除数为0则直接在ans后加上(0)即可ans.push_str((0));r 1;break;}}}println!({}{} {}, a / b, ans, r);
}