《leetCode》:Integer to Roman
2015-11-01 16:49
141 查看
题目描述
Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999.
思路
由于罗马数字就是由”个“”十“、”百“拼凑而来。因此我们只需要将下面几张表存储起来,然后查表即可【罗马数字】 1~9: {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}; 10~90: {"X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}; 100~900: {"C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}; 1000~3000: {"M", "MM", "MMM"}.
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> char oneStr[9][5]= {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}; char tenStr[9][5]={"X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}; char hundredStr[9][5]={"C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}; char thStr[3][5]={"M", "MM", "MMM"}; int my_integerLen(int x){ int len=0; while(x!=0){ len++; x/=10; } return len; } char *strPoint(int len,int temp){ switch(len){ case 1:return oneStr[temp-1]; case 2:return tenStr[temp-1]; case 3:return hundredStr[temp-1]; case 4:return thStr[temp-1]; } } char* intToRoman(int num) { char *str; int len=my_integerLen(num); bool flag=true; while(num!=0){ int temp=num/(pow(10,len-1)); char *str1=strPoint(len,temp);//返回该位代表的字符串 if(flag){//第一次进行复制,之后进行连接 str=(char *)malloc((strlen(str1)+1)*sizeof(char)); strcpy(str,str1); flag=false; } else{ strcat(str,str1);//copy到str中。 } //更新x和其长度 num%=((int)(pow(10,len-1))); len=my_integerLen(num); } return str; } int main(void){ int num; while(scanf("%d",&num)!=EOF){ char *str=intToRoman(num); puts(str); } return 0; }
相关文章推荐
- 图像处理与计算机视觉:基础,经典以及最近发展(1)序
- c语言之指针与数组理解一(数据拷贝)
- Maven 搭建 SpringMVC
- VS2010 LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- 【项目2-3 - 上三角矩阵——第9周】
- 代理delegate与通知Notification、block的使用区别
- 数据存储之SQLiteDatabase
- GIS开源程序收集
- msm8916_camera_参数传递
- AF 请求 GET POST DownLoad NetStatus
- 软件测试基础7-8章
- Ios学习的相关建议
- NOIP复习-004——排列组合+快速幂
- SpringIOC_HelloWord
- vi编辑器用法总结
- Android 事件传递
- 数据库与数据仓储的本质区别
- NET版微信客户端.
- 快速幂取模详解(C语言版)
- spring boot实战(第十二篇)整合RabbitMQ