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; }
相关文章推荐
- TYVJ 1084 数字三角形4 解题报告
- TYVJ 1076 数字三角形2 解题报告
- TYVJ 1079 数字三角形3 解题报告
- TYVJ 1063 数字串 解题报告
- TYVJ 1100 超级书架2 解题报告
- TYVJ 1124 花店橱窗 解题报告
- codevs 1164 || NOIP 2007 统计数字 模拟 解题报告
- Leetcode 412. Fizz Buzz 数字生成 解题报告
- Problem E: 小力的数字游戏 解题报告
- TYVJ 1066 合并果子 解题报告
- TYVJ 1093 验证数独 解题报告
- TYVJ 1101 字典序 解题报告
- TYVJ 1114 搭建双塔 解题报告
- TYVJ 1111 舞会 强联通分量版解题报告
- TYVJ 1512 异或密码 解题报告
- ZZULI 1234 数字串 解题报告
- bzoj 1455 罗马游戏 解题报告
- 找出N个数字中唯一出现奇数次的数 解题报告
- timus 1658. Sum of Digits URAL 解题报告 DP 数字位数和……
- 解题报告:BZOJ_2154: Crash的数字表格 莫比乌斯反演