$number=&input; print "$number\n"; # 入力サブルーチン sub input { my $number; my $n0,$n1,$n2; while () { # 無限ループ print "1-9の数字を重複なしに組み合わせた3桁の数字を入力してください。"; $number=<stdin>; chomp($number); if ($number>=123 && $number<=987) { # 数字チェック return $number; } print "入力が正しくありません。\n"; } }
桁の数は「求めたい桁の一つ上の桁の数で割った余り」を「求めたい桁の数で割った商」で求まります。例えば、十の桁の数は「(元の数%100)/10」で計算します。
$number=&input; print "$number\n"; # 入力サブルーチン sub input { my $number; my $n0,$n1,$n2; while () { # 無限ループ print "1-9の数字を重複なしに組み合わせた3桁の数字を入力してください。"; $number=<stdin>; chomp($number); if ($number>=123 && $number<=987) { # 数字チェック $n0=int($number/100); # 百の桁 $n1=int(($number%100)/10); # 十の桁 $n2=$number%10; # 一の桁 if ($n0!=$n1 && $n1!=$n2 && $n2!=$n0 && $n0*$n1*$n2!=0) {# 重複&非零チェック return $number; } } print "入力が正しくありません。\n"; } }
ここでは3桁なので各桁を個別に求めていますが、任意の桁の数のときには繰り返しを使って求めます。