Entries

「古典的ローマ数字」

邪魔されながら練習問題した
・整数を渡すと古典的ローマ数字を表す文字列を返すメソッドを書いてください。たとえば4は"IIII"を返すものとします。ローマ数字として使われる文字の値は次の通りです。
I = 1  V = 5 X = 10 L = 50 C = 100 D = 500 M = 1000


「余剰の出し方ってどう書くんですか」
「%でいいんじゃないんですか、ふーんおもしろいことやってるね、僕もやろうか」
「やらなくていいです」
「コンソールで書くの?Cでいい?」
「やらなくていいです」

僕が書いたやつ
suuji = gets.chomp

M = suuji.to_i/1000
kurikosi = suuji.to_i%1000
D = kurikosi/500
kurikosi = kurikosi%500
C = kurikosi/100
kurikosi = kurikosi%100
L = kurikosi/50
kurikosi = kurikosi%50
X = kurikosi/10
kurikosi = kurikosi%10
V = kurikosi/5
kurikosi = kurikosi%5
I = kurikosi/1

puts 'M'*M+'D'*D+'C'*C+'L'*L+'X'*X+'V'*V+'I'*I

動かしたやつ
awa:programs drunkennessgod$ ruby calc2.rb
1234
MCCXXXIIII

一応動くがクソコードだということは重々承知している

「できた」
「やらなくていいですって」
「みてみて」
「ちくしょう!」

#include "stdafx.h"
#include "conio.h"

char digit[] = "MDCLXVI";
int buf[7];

int _tmain(int argc, _TCHAR* argv[])
{
if (argc != 2) {
fprintf(stderr, "usage: roman number\n");
exit(1);
}
int num = atoi(argv[1]);

buf[0] = num / 1000; num %= 1000;
buf[1] = num / 500; num %= 500;
buf[2] = num / 100; num %= 100;
buf[3] = num / 50; num %= 50;
buf[4] = num / 10; num %= 10;
buf[5] = num / 5; num %= 5;
buf[6] = num;


for (int i=0; i <7; i++) {
while (buf[i]-- != 0) {
printf("%c", digit[i]);
}
}

getchar();

return 0;
}

「これがプロと素人の差だわ」
「素人に勝って楽しいですか」
「ねえこれコンソールやめてアプリケーションにしてあげようか」
「やらなくていいです」

悔しいので改めて書き直そうとおもう。
関数と配列できれいになりそうな感じするんだけどピンとこない。
出題の意図を汲んだ解答を出したい。
関連記事

Appendix

浅野あわわ

PV

CURRENT MOON

SEARCH

EVENT LINK