44 lines
1.0 KiB
Rust
44 lines
1.0 KiB
Rust
macro_rules! parse_line {
|
|
($($t: ty),+) => ({
|
|
let mut line = String::new();
|
|
std::io::stdin().read_line(&mut line).unwrap();
|
|
let mut iter = line.split_whitespace();
|
|
($(iter.next().unwrap().parse::<$t>().unwrap()),+)
|
|
})
|
|
}
|
|
|
|
fn main() {
|
|
let (x, b): (i64, i64) = parse_line!(i64, i64);
|
|
if b > 0 {
|
|
if x >= 0 {
|
|
println!("{}", transform(x, b, 1));
|
|
} else {
|
|
println!("-{}", transform(-x, b, 1));
|
|
}
|
|
} else {
|
|
println!("{}", transform(x, -b, -1));
|
|
}
|
|
}
|
|
|
|
fn transform(x: i64, b: i64, b_sign: i64) -> String {
|
|
if x == 0 {
|
|
return format!("0").to_string();
|
|
}
|
|
let mut temp: i64 = x;
|
|
let mut res = String::new();
|
|
while temp != 0 {
|
|
let q: i64 = {
|
|
if temp % b == 0 || temp > 0 {
|
|
temp / b
|
|
} else {
|
|
temp / b - 1
|
|
}
|
|
};
|
|
|
|
let rem: i64 = temp - q * b;
|
|
res = format!("{}{}", rem, res).to_string();
|
|
temp = q * b_sign;
|
|
}
|
|
return res;
|
|
}
|