九九の表示
動的にサイズを変えられるようにしてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | static void Main(string[] args)
{
kuku(9);
kuku(99);
kuku(999);
}
static void kuku(int n)
{
int len = n.ToString().Length;
int xLen = (n * n).ToString().Length;
string format = "{0, " + len + "} * {1, " + len + "} = {2, " + xLen + "}";
for (int i = 1; i <= n ; ++i)
for (int j = 1; j <= n ; ++j)
Console.WriteLine(format, i, j, i * j);
}
|
面白くない答えですが・・・ sayは、printlnだと思ってください。 t_ishida
1 | for(var i=1;i<10;i++) for(var j = 1;j<10;j++) say([i,'*',j,'=',''].join(' ') + (i * j > 9 ? '' : ' ') + i * j);
|
Posted feedbacks - StandardML
SML/NJのFormatストラクチャ使用。 とりあえず2桁以上も無問題。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | fun showMTable n =
let
fun show col row =
let
open Format
fun loop n m =
let
val h = n div 10
in
if h = 0 then m else loop h (m + 1)
end
val x = loop n 1
val y = loop (n * n) 1
val s = format ("%%%dd * %%%dd = %%%dd\n") [INT x, INT x, INT y]
in
if col <= n then
if row <= n then
(formatf s print [INT col, INT row, INT (col * row)];
show col (row + 1))
else
show (col + 1) 1
else
()
end
in
show 1 1
end;
showMTable 9 (* showMTable n で n * n まで表示 *)
|
多分こう書くのが普通じゃないかと思った。というコトで、大した変更はないですがリファクタリング。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | fun showMTable n =
let
fun show col row =
let
open Format
fun loop n m =
let
val h = n div 10
in
if h = 0 then m else loop h (m + 1)
end
val x = loop n 1
val y = loop (n * n) 1
in
if col <= n then
if row <= n then
(formatf "%d * %d = %d\n" print [RIGHT (x, INT col), RIGHT (x, INT row),
RIGHT (y, INT (col * row))];
show col (row + 1))
else
show (col + 1) 1
else
()
end
in
show 1 1
end;
showMTable 9 (* showMTable n で n * n まで表示 *)
|





にしお
#3418()
Rating0/2=0.00
なお、この問題は掛け算をどうやるかではなく、 どうやって右端がそろうようにレイアウトするかに重点を置いているので、 下のようなへこんだ出力は禁止です。
2 replies [ reply ]