• 计蒜课_罗马数字转换为整数


    思路总结:这道题重点在于对罗马数字规则的把握,熟悉了罗马数字的规则以后,实现主要思路是

    1、输入的罗马数字字符串str;

    2、一个字符数组C,在代码中给出c;

    在给定的字符数组C中,不断地判断C的当前元素是否为str的前缀,即分别确定str所代表数字的千位,百位,十位,个位:

    实现代码如下:

     1 int getLength(const char*str) {//获取字符串的长度;
     2     int length_of_str;
     3     for (length_of_str = 0;str[length_of_str] != '';length_of_str++);
     4     return length_of_str;
     5 }
     6 bool is_prefix(const char*str1,const char*str2) {//判断str1是否为str2的前缀;
     7     int length_of_str1 = getLength(str1);
     8     int length_of_str2 = getLength(str2);
     9     if (length_of_str1 > length_of_str2)
    10         return false;
    11     for (int i = 0;i < length_of_str1;i++) {
    12         if (str1[i] != str2[i]) {
    13             return false;
    14         }
    15     }
    16     return true;
    17 }
    18 int RomanToInt(const char*str) {//主要实现函数;
    19     char*c[4][10] = {
    20         {"","I","II","III","IV","V","VI","VII","VIII","IX"},//1~9;
    21         {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"},//10~90;
    22         {"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"},//100~900;
    23         {"","M","MM","MMM"},//1000~3000;
    24     };
    25     int result = 0;//存放结果;
    26     int length_of_str = getLength(str);//获取待转换为罗马数字的字符串的长度;
    27     int currentrow=3;//初始位置的列数;
    28     int currentcolumn=3;//初始位置的行数;
    29     int current_length;
    30     while((currentrow>=0)&&(str[0] != '')){
    31         current_length = getLength(c[currentrow][currentcolumn]);
    32         if (is_prefix(c[currentrow][currentcolumn],str)) {
    33             result = result*10+currentcolumn;//更新result;
    34             currentrow--;
    35             currentcolumn = 9;
    36             str += current_length;//若对字符串的前缀判断成功,则将字符串str的指针右移相应长度;
    37         }
    38         else {
    39             if (--currentcolumn == 0) {
    40                 currentrow--;
    41                 currentcolumn = 9;
    42             }
    43         }
    44 
    45     }
    46     return result;
    47 }
    如有不当,欢迎指正 :)
  • 相关阅读:
    win8 vs2010 openni2 配置
    写一个程序,分析一个文本文件(英文文章)中各个词出现的频率,并且把频率最高的十个词打印出来。
    电梯调度
    new 一个button 然后dispose,最后这个button是null吗???
    org.apache.hadoop.security.AccessControlException
    算法导论第二章、插入排序
    算法导论第六章、堆排序
    算法导论第八章、计数排序
    观后感
    第二次随笔
  • 原文地址:https://www.cnblogs.com/lif323/p/6797793.html
Copyright © 2020-2023  润新知