use std::io; macro_rules! parse_input { ($x:expr, $t:ident) => ($x.trim().parse::<$t>().unwrap()) } macro_rules! parse_inputs { ($x:expr, $t:ident) => ( $x.trim() .split_whitespace() .map(|s| s.parse::<$t>().unwrap()) .collect::>() ) } macro_rules! print_err { ($($arg:tt)*) => ( { use std::io::Write; writeln!(&mut ::std::io::stderr(), $($arg)*).ok(); } ) } fn main() { let ds = "01234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991" // let ds = "0999" .bytes() .map(|x| (x as i64) - 48) .collect::>(); let dl = ds.len(); let mut input_line = String::new(); io::stdin().read_line(&mut input_line).unwrap(); let ns = input_line.trim().bytes().map(|x| (x as i64) - 48).collect::>(); let nl = ns.len(); let mut v = vec![0; dl + nl]; for (i, n) in ns.iter().rev().enumerate() { for (j, d) in ds.iter().rev().enumerate() { let tmp = v[j + i]; // println!("n:{} d:{}", n, d); // print!("{}, ", (tmp + n * d)); // print!("{}, ", (tmp + n * d) % 10); // println!("{}", (tmp + n * d) / 10); v[j + i] = (tmp + n * d) % 10; v[j + i + 1] += (tmp + n * d) / 10; } // for j in 0..(dl + nl) { // print!("{}", v[j]); // } // println!("", ); } let mut flag = true; for i in (0..dl + nl).rev() { if flag && v[i] == 0 { continue; } else if flag && v[i] != 0 { flag = false; } if i == dl - 2 { print!(".{}", v[i]); } else if i < dl - 2 { print!("{}", v[i]); } else { print!("{}", v[i]); } } println!("", ); }