結果
問題 | No.539 インクリメント |
ユーザー | gyu-don |
提出日時 | 2017-07-23 21:56:13 |
言語 | Rust (1.77.0 + proconio) |
結果 |
CE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 1,934 bytes |
コンパイル時間 | 12,297 ms |
コンパイル使用メモリ | 381,312 KB |
最終ジャッジ日時 | 2024-11-14 20:10:01 |
合計ジャッジ時間 | 13,711 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
コンパイルメッセージ
error[E0782]: trait objects must include the `dyn` keyword --> src/main.rs:5:26 | 5 | fn f() -> Result<(), Box<Error>> { | ^^^^^ | help: add `dyn` keyword before this trait | 5 | fn f() -> Result<(), Box<dyn Error>> { | +++ For more information about this error, try `rustc --explain E0782`. error: could not compile `main` (bin "main") due to 1 previous error
ソースコード
use std::error::Error; use std::io::{stdin}; use std::iter::FromIterator; fn f() -> Result<(), Box<Error>> { let mut s = String::new(); stdin().read_line(&mut s)?; let n: u32 = s.trim().parse()?; for _ in 0..n { let mut s = String::new(); stdin().read_line(&mut s)?; let s = s.trim(); println!("{}", g(s)); } Ok(()) } fn g(s: &str) -> String { let b = s.as_bytes(); let mut num_end = (b.len() - 1) as isize; while num_end >= 0 { if '0' as u8 <= b[num_end as usize] && b[num_end as usize] <= '9' as u8 { break; } num_end -= 1; } if num_end < 0 { return s.to_owned(); } // b[num_end] is number. let mut num_unmodified = num_end - 1; let num_end = num_end as usize; let mut num_buf = vec![]; if b[num_end] == '9' as u8 { num_buf.push('0' as u8); loop { match b[num_unmodified as usize] { x if x == '9' as u8 => { num_buf.push('0' as u8); num_unmodified -= 1; }, x if '0' as u8 <= x && x <= '8' as u8 => { num_buf.push(x + 1); num_unmodified -= 1; break; } _ => { num_buf.push('1' as u8); break; } } if num_unmodified < 0 { num_buf.push('1' as u8); break; } } } else { num_buf.push(b[num_end] + 1); } let mut v = if num_unmodified >= 0 { Vec::from_iter(b[..num_unmodified as usize + 1].iter().cloned()) } else { Vec::new() }; v.extend(num_buf.into_iter().rev()); if num_end < b.len() - 1 { v.extend(b[num_end + 1..].iter().cloned()); } String::from_utf8(v).unwrap() } fn main() { f().unwrap(); }