Rustのbreakとラベル付きループのメモ
たまに使いたくなるたびに調べているのでメモ
fn main() { // loopは式なのでbreakで値を返すことができる. forやwhileではできない. let n = { let mut n = 3; loop { if 2u32.pow(n)+ n >= n.pow(3)-n { break n; } n += 1; } }; println!("The minimum integer n >= 3 satisfying 2^n +n >= n^3-n is {}.",n); // loop, while, forにはラベルを付けてbreak, continueすることができる. let mut x = (0,0,0); 'main: for i in 2.. { 'sub: for j in 2..300 { for k in 2..300 { if 2*j+k <= 200 { continue 'sub; } if i+j+k >= 1000 { x = (i,j,k); break 'main; } } } } println!("An example of (i,j,k) satisfying 2*j+k > 200 and i+j+k <= 1000 is ({},{},{}).",x.0,x.1,x.2) }
実行結果
The minimum integer n >= 3 satisfying 2^n +n >= n^3-n is 10. An example of (i,j,k) satisfying 2*j+k > 200 and i+j+k <= 1000 is (402,299,299).