2th roma int
来源:互联网 发布:文华财经编程视频教程 编辑:程序博客网 时间:2024/06/01 19:42
这个仍旧使用查表法,比较简单,直接上代码:
#include <stdio.h>#include <stdlib.h>#include "string.h"#include "math.h"char lut_1[10][8] = {"I","II","III","IV","V","VI","VII","VIII","IX"};char lut_10[10][8] = {"X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};char lut_100[10][8] = {"C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};char lut_1000[10][8] = {"M","MM","MMM"};//M D C L X V I//7 6 5 4 3 2 1#define LOG_FLAG 0char str_lut[7] = {'I','V','X','L','C','D','M'};//01 10 02 23 32 24 45 54 46int wait_signal_lut[10][2]={{1,2},{2,1},{1,3},{3,4},{4,3},{3,5},{5,6},{6,5},{5,7},};int lut_num_real_num[31][2]={{1 ,1},{11,2},{111,3},{12,4},{2 ,5},{21,6},{211,7},{2111,8},{13,9},{3,10},{33,20},{333,30},{34,40},{4,50},{43,60},{433,70},{4333,80},{35,90},{5,100},{55,200},{555,300},{56,400},{6,500},{65,600},{655,700},{6555,800},{57,900},{7,1000},{77,2000},{777,3000},};int look_up_every_char(char c){int i=0;for(i=0;i<7;i++){if(str_lut[i] == c){return i+1;}}return 0;}int roma_separate(char *roma_buf,int *int_buf){int lens = 0 , i = 0 , temp = 0;lens = strlen(roma_buf);for (i = 0; i < lens; i++){temp = look_up_every_char(roma_buf[i]);if(!temp){printf("ERROR!\n");return -1;}int_buf[i] = temp;}return lens;}int wait_for_dec_signal(int prev , int val){int i = 0, j=0;#if LOG_FLAGprintf("wait_for_dec_signal %d %d\n", prev,val);#endiffor(i=0;i<9;i++){if((prev == val)||((wait_signal_lut[i][0]==prev)&&(wait_signal_lut[i][1]==val))){return 0; //no signal}}return 1; //signal come}int combine_2_one(int *temp,int lens){int i = 0,j = 0,sum = 0;for(j = lens-1;j>=0;j--){sum += temp[i] * pow(10,j) ;i++;}return sum;}/*第一位默认入栈,从第二位开始等待进位信号,如果没有,则接着入栈,有进位则将栈中的数保存至buf,指针赋值0,count++ */int roma_int_thansform(int *int_buf,int *int_buf_2th,int lens){int i = 0 , j=0,k=0,counter = 0 ,temp[10] ;for (i = 0; i < lens; i++){if(i==0)//first bit{temp[0] = int_buf[0];j++;continue;}if(wait_for_dec_signal(int_buf[i-1],int_buf[i])) //end this bit{#if LOG_FLAGprintf("before trans temp\n");for(k=0;k<j;k++){printf(" %d\t", temp[k]);}printf("\n");#endifint_buf_2th[counter]= combine_2_one(temp,j);#if LOG_FLAGprintf("sum %d\n", int_buf_2th[counter]);#endifj=0;counter++;temp[j] = int_buf[i];j++;}else{temp[j] = int_buf[i];j++;}if(i==lens - 1){#if LOG_FLAGprintf("end before trans temp\n");for(k=0;k<j;k++){printf(" %d\t", temp[k]);}printf("\n");#endifint_buf_2th[counter]= combine_2_one(temp,j);#if LOG_FLAGprintf("sum %d\n", int_buf_2th[counter]);#endifj=0;counter++;}}return counter;}int get_real_num(int *buf_num,int lens){int i,j=0,k=0,temp[10];#if LOG_FLAGprintf("get real orig\n");for(k=0;k<lens;k++){printf(" %d\t", buf_num[k]);}printf("\n");#endiffor(i=0;i<lens;i++){for(j=0;j<30;j++){if(buf_num[i] == lut_num_real_num[j][0]){temp[i] = lut_num_real_num[j][1];break;}}}#if LOG_FLAGprintf("get real temp\n");for(k=0;k<lens;k++){printf(" %d\t", temp[k]);}printf("\n");#endifi=0;for(k=0;k<lens;k++){i += temp[k];}return i;}int roma_2_int(char *roma_buf){int int_buf_1th[20],int_buf_2th[4];int i = 0 , j = 0 , lens = 0 ;lens = roma_separate(roma_buf,int_buf_1th);#if LOG_FLAGprintf("int_buf_1th\n");for(i=0;i<lens;i++){printf(" %d\t", int_buf_1th[i]);}printf("\n");#endifif(lens < 0){return -1;}lens = roma_int_thansform(int_buf_1th,int_buf_2th,lens);#if LOG_FLAGprintf("int_buf_2th\n");for(i=0;i<lens;i++){printf(" %d\t", int_buf_2th[i]);}printf("\n");#endifif(lens<5){return get_real_num(int_buf_2th,lens);}else{return -1;}}int main(int argc, char **argv){char roma_input[20];if(argc!=2){printf("Usage: roma2int roma_number(0-3999)\n");return -1;}strcpy(roma_input,argv[1]);#if LOG_FLAGputs(roma_input);#endifprintf("%d\n", roma_2_int(roma_input));return 1;}
阅读全文
0 0
- 2th roma int
- Codeforces Round #160 (Div. 2)---A. Roma and Lucky Numbers
- Echo2+Roma
- Codeforces803E Roma and Poker
- A. Roma and Lucky Numbers
- B. Roma and Changing Signs
- 2th Nov Lab_Log
- 12th_usb(2th)
- 2th integer_to_roman
- Th
- th
- had got my way to Roma
- Roma II人工只能开发笔记(1)
- codeforces 262B Roma and Changing Signs
- Codeforce - 262 - B. Roma and Changing Signs
- Codeforces #803E: Roma and Pokers 题解
- linux驱动学习-2th
- 题目2 : K-th string
- 带修改的莫队算法【JZOJ 4594】【UVa 12345】Dynamic len
- #快速幂#POJ 2991 2011&&luogu 1226 取余运算
- LInux安装ARPACK库
- Internet结构
- python数据存储系列教程——python中mysql数据库操作:连接、增删查改、指令执行
- 2th roma int
- 最长回文子串
- 扩展欧几里得算法
- 深度学习
- ERROR 1045 (28000)- Access denied for user 'xxx'@'localhost' (using password- YES)【奇葩的bug】
- linux进程编程,exec系列函数(execl,execlp,execle,execv,execvp)使用
- C++debug调试出现heap corruption detected: after normal block 可能的原因
- angular2后台管理系统
- Spring事务管理(详解+实例)