Все забываю скинуть свое решение. Оно на рабочем компе и не так просто вспомнить об этом в нужный момент :) Но количество кода в предыдущем решении точно можно уменьшить.
Когда писал про кодировки, так же вскользь упоминали даты.
И вот буквально на днях прочитал статьи на хабре, посвященные этой теме.
Первый пост и дополненный
второйНа досуге можно почитать пост об именах пользователей, вдохновивший автора двух вышеупомянутых постов про даты -
ссылка (Инглиш)
Я полез в англоязычный оригинал и начал смотреть, откуда автор брал утверждения, которые порвали мне шаблон.
Как например:
Цитата
16. Субботе всегда предшествует пятница.
Sad, but trueНу и завис на пару часов, читая различные пруфы. К примеру, что в Швеции было
30 февраля, в Сингапуре подкручивали
время не на целое число часов,
еврейский календарь это еще та штука (да и календарей разных
множество) и много чего другого.
Ну и недавно узнал, когда Григорианский календарь пришел к нам в Россию. Раньше я думал, что это произошло где-то в 18-19 веках. А все, кого я спрашивал об этом, почему-то говорили про Петра I.
А на самом деле это случилось меньше 100 лет назад,
в 1918 году. А ведь реально, какая-нибудь столетняя бабушка жила когда-то по Юлианскому календарю, что лично мне ломает напрочь все шаблоны.
И более того, оплот российской духовности, хранители скреп всея Руси, РПЦ - юзает юлианский календарь по сей день...
В общем, помимо того, что работа с датами это огромнейший гемор (и до недавних пор я не представлял всей его величины), это еще и нескончаемый источник различных лулзов и интересных фактов.
Короче говоря, век живи - век учись.
На эту тему есть еще и
видео у яндекса.
По алгориму:
Текст программы:
public class Romans_to_Decimals
{
public static void main(String[] args)
{
System.out.println("Enter roman number from I to MMMCMXCIX (1 to 3999), q to quit: ");
Scanner in = new Scanner(System.in);
boolean done = false;
while (!done && in.hasNext())
{
String number = in.next();
if (number.equals("q"))
{
done = true;
}
else
{
int result = 0;
char[] array = number.toCharArray();
for (int i = number.length() - 1; i >= 0; i--)
{
switch ( array )
{
case 'I':
result += 1;
break;
case 'X':
if (i != 0 && array[i-1] == 'I') //IX = 9
{
result += 9;
i--;
}
else
{
result += 10;
}
break;
case 'C':
if (i != 0 && array[i-1] == 'X') //XC = 90
{
result += 90;
i--;
}
else
{
result += 100;
}
break;
case 'M':
if (i != 0 && array[i-1] == 'C') //CM = 900
{
result += 900;
i--;
}
else
{
result += 1000;
}
break;
case 'V':
if (i != 0 && array[i-1] == 'I') //IV = 4
{
result += 4;
i--;
}
else
{
result += 5;
}
break;
case 'L':
if (i != 0 && array[i-1] == 'X') //XL = 40
{
result += 40;
i--;
}
else
{
result += 50;
}
break;
case 'D':
if (i != 0 && array[i-1] == 'C') //CD = 400
{
result += 400;
i--;
}
else
{
result += 500;
}
break;
default:
System.out.println("Not correct roman number");
break;
}
}
System.out.println("Corresponding decimal number is: " + result);
}
}
in.close();
}
}[/i][/i][/i][/i][/i][/i]
p.s. В свитче у массива почему-то не отображается индекс и без отступов (их можно как-то сделать?) текст проги совсем фигово читается .