ZOJ-2939

来源:互联网 发布:大连pmp培训 知乎 编辑:程序博客网 时间:2024/05/21 15:40

罗马数字转换,也没啥难度,直接按规则写就行了

#include<stdio.h>#include<string.h>static int map[26];static void print(int num){int i, d = num / 1000;for (i = 0; i < d; i++)putchar('M');d = (num / 100) % 10;if (d == 9)printf("%s", "CM");else if (d == 4)printf("%s", "CD");else{if (d >= 5)putchar('D');for (i = 0; i < d % 5; i++)putchar('C');}d = (num / 10) % 10;if (d == 9)printf("%s", "XC");else if (d == 4)printf("%s", "XL");else{if (d >= 5)putchar('L');for (i = 0; i < d % 5; i++)putchar('X');}d = num % 10;if (d == 9)printf("%s", "IX");else if (d == 4)printf("%s", "IV");else{if (d >= 5)putchar('V');for (i = 0; i < d % 5; i++)putchar('I');}}static int number(char *s){int i, res = 0;for (i = 0; s[i] != '\0'; i++)if ((s[i] == 'I' || s[i] == 'X' || s[i] == 'C')&& map[s[i] - 'A'] < map[s[i + 1] - 'A']){res += map[s[i + 1] - 'A'] - map[s[i] - 'A'];i++;}elseres += map[s[i] - 'A'];return res;}int main(){map['I' - 'A'] = 1;map['V' - 'A'] = 5;map['X' - 'A'] = 10;map['L' - 'A'] = 50;map['C' - 'A'] = 100;map['D' - 'A'] = 500;map['M' - 'A'] = 1000;int n, i, count = 0;char s[20];while (scanf("%d", &n), n){getchar();int sum = 0;for (i = 0; i < n; i++){scanf("%s", s);sum += number(s);}printf("Case ");print(++count);printf(": ");print(sum);putchar('\n');}return 0;}


0 0