Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::io;
- use std::str::SplitWhitespace;
- fn sum_num_ultra(mut x: i128) -> i128 {
- let mut sum: i128 = 0;
- while x > 0 {
- sum += x % 10;
- x /= 10;
- }
- return sum;
- } /*общий поиск суммы цифр*/
- fn main() {
- let mut t: String = String::new();
- io::stdin().read_line(&mut t).unwrap();
- let t: usize = t.trim().parse().unwrap();
- let mut v: Vec<(u32, u32)> = Vec::with_capacity(t);
- v.resize(t, (0, 0));
- for i in 0..t {
- let mut input: String = String::new();
- io::stdin().read_line(&mut input).unwrap();
- let mut it_input: SplitWhitespace = input.split_whitespace();
- let num: u32 = it_input.next().unwrap().parse().unwrap();
- let amn: u32 = it_input.next().unwrap().parse().unwrap();
- v[i].0 = num;
- v[i].1 = amn;
- }
- let mut answer: Vec<i128> = Vec::with_capacity(t);
- for i in v.iter() {
- if i.1 == 0 {
- let mut count: usize = 0;
- let mut target: u32 = i.0;
- while target >= 9 {
- target -= 9;
- count += 1;
- }
- let mut str: String = String::with_capacity(count + 1);
- if target > 0 {
- str.push(std::char::from_digit(target, 10).unwrap());
- }
- for _q in 0..count {
- str.push(std::char::from_digit(9, 10).unwrap());
- }
- answer.push(str.trim().parse().unwrap());
- } else {
- let mut print: bool = false;
- let mut min: i128 = 69999999999999999;
- for x in 0..10 {
- let mut pred: i128 = sum_num_ultra(x);
- let mut sum: i128 = pred;
- for q in x + 1..x + i.1 as i128 + 1 {
- if q % 10 != 0 {
- sum += pred + 1;
- pred += 1;
- } else {
- pred = sum_num_ultra(q);
- sum += pred;
- }
- }
- if sum == i.0 as i128 {
- if x < min {
- min = x;
- }
- print = true;
- } else if sum < i.0 as i128 {
- let mut target: i128 = i.0 as i128;
- target -= sum;
- let mut ur: i128 = 0;
- let mut nine: bool = false;
- for b in x..x + i.1 as i128 + 1 {
- if nine {
- ur += 1;
- }
- if b % 10 == 9 {
- nine = true;
- }
- }
- target -= ur;
- if target >= 0 && target % (i.1 as i128 + 1) == 0 {
- let mut cif: i128 = target / (i.1 as i128 + 1);
- let mut an: String = String::with_capacity(cif as usize / 9 + 1);
- an.push(std::char::from_digit(x as u32, 10).unwrap());
- while cif >= 9 {
- cif -= 9;
- an.insert(0, '9');
- }
- if cif > 0 {
- an.insert(0, std::char::from_digit(cif as u32, 10).unwrap());
- }
- let a: i128 = an.trim().parse().unwrap();
- if a < min {
- min = a;
- }
- print = true;
- }
- }
- }
- if !print {
- answer.push(-1);
- } else {
- answer.push(min);
- }
- }
- }
- for i in answer {
- println!("{}", i);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement