Leetcode13:罗马数字转整数【c语言实现】

在这里插入图片描述
在这里插入图片描述

  • 首先拿到这个题,第一感觉就是不想做了,好长啊。
  • emm,算了,还是继续做叭。
  • 首先就是想起来char 不是单字符吗?怎么会存这么长,然后去度娘学习了解了一下 char、char*、char[]
  • 先简单记一下后面再单独写一下差异:char*s 是拿到这个字符串的第一个字符的首地址。
  • 有了这个char*的概念就好做了,既然是地址那就应该可以 *s++ 取下一位,我记得是这样的。
  • 就去写了如下的方法,测试了一下,可行,接下来就比较好写了
while(*s){
	print("%c",*s++);
}
  • 接下来注释都写得很清楚了。直接贴代码叭。

roman-to-integer.c

/**
  * -*- coding: utf-8 -*-
  *  @Time    : 2019/8/6 21:38
  *  @Author  : 奥利波德
  *  @FileName: roman-to-integer.c
  *  @Software: CLion
  *  @Blog    :https://blog.csdn.net/qq_44265507
 */
#include <stdio.h>
int romanToInt(char * s){
     /**
      * result = 结果、
      * romon=上一个罗马数对应数值、
      * temp=当前罗马数对应数值
      * */
    int result=0,roman=0,temp=0;
    while (*s){
        switch (*s){
            case 'I':temp =1;break;
            case 'V':temp =5;break;
            case 'X':temp =10;break;
            case 'L':temp =50;break;
            case 'C':temp =100;break;
            case 'D':temp =500;break;
            case 'M':temp =1000;
        }
        /**
         * 如果当前的罗马数比上一位大 即当前值减去上一位的值
         *      再减去上一步的那个已经加上去的较小值
         *      再进行累计result
         * 如果当前罗马值比上一个小
         *      直接加
         *
         * */
        if(temp>roman){
            result = result + (temp - roman) - roman;

        }else{
            result = result + temp;
        }
        roman = temp;
        /**
         * 记录当前罗马值 便于下一步比较
         *
         * */
        *s++;
    }
    return result;
}


int main(){
    char *s = "IV";
    int result = romanToInt(s);
    printf("result = %d",result);
    return 0;
}

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值