您的位置:首页 > 其它

TYVJ 1070 罗马数字 解题报告

2011-07-02 12:07 399 查看
  这题一开始确实会感觉很难,但是罗马数字的个位只有可能是{"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"},同理,十位上的数字也永远都是固定的,所以还是简单吧,实现代码如下:

#include <stdio.h>
#include <stdlib.h>
char num[4][10][5] = {
{"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"},
{"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"},
{"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"},
{"", "M", "MM", "MMM"}};
int have[7];
int name[7] = {'I', 'V', 'X', 'L', 'C', 'D', 'M'};

int order(char c)
{
switch(c){
case 'I':
return 0;
case 'V':
return 1;
case 'X':
return 2;
case 'L':
return 3;
case 'C':
return 4;
case 'D':
return 5;
case 'M':
return 6;
}
}

void add(int a, int b)
{
int i;
for(i = 0; num[a][b][i] != '\0'; i++){
have[order(num[a][b][i])]++;
}
}

void count(int k)
{
int i = 0;
while(k != 0){
add(i, k % 10);
k /= 10, i++;
}
}

int main(int argc, char **argv)
{
int i;
int n;
scanf("%d", &n);
for(i = 1; i <= n; i++){
count(i);
}
for(i = 0; i < 7; i++){
if(have[i]){
printf("%c %d\n", name[i], have[i]);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: