leetcode算法题--罗马数字转整数(C语言实现)

谁践踏了优雅 2022-12-01 12:27 201阅读 0赞

题目描述:

在这里插入图片描述

范例:

在这里插入图片描述
思路分析:根据题目描述以及范例在C语言的里面我们可以想到switch循环,对每个符就是不同的case,赋予不同的数值,但是,对于有规律的字符串switch并不能更好的处理,因此需要分若干类,如若某个字符是I,下一个是V,则需要进行对应的不同的运算。

代码分析:

  1. #include<stdio.h>
  2. //#include <stdlib.h>
  3. int RomanToInt(char *s) {
  4. int a=0,i=0;
  5. while(s[i]!='\0') {
  6. if (s[i] == 'I' && s[i+1] == 'V') {
  7. a += 4;
  8. i++;//每个if语句都要i自增,避免死循环
  9. }
  10. else if(s[i]=='I'&&s[i+1]=='X'){
  11. a+=9;
  12. i++;
  13. }
  14. else if(s[i]=='X'&&s[i+1]=='L'){
  15. a+=40;
  16. i++;
  17. }
  18. else if(s[i]=='X'&&s[i+1]=='C'){
  19. a+=90;
  20. i++;
  21. }
  22. else if(s[i]=='C'&&s[i+1]=='D'){
  23. a+=400;
  24. i++;//每一次计数器都要计数不然会进入死循环
  25. }
  26. else if(s[i]=='C'&&s[i+1]=='M'){
  27. a+=900;
  28. i++;
  29. }
  30. else{
  31. switch(s[i]){
  32. case 'I':a+=1;break;
  33. case 'V':a+=5;break;
  34. case 'X':a+=10;break;
  35. case 'L':a+=50;break;
  36. case 'C':a+=100;break;
  37. case 'D':a+=500;break;
  38. case 'M':a+=1000;break;
  39. }
  40. i++;
  41. }
  42. }
  43. return a;
  44. }
  45. int main(){
  46. char string[10000];
  47. gets(string);
  48. RomanToInt(string);
  49. printf("转变之后的数字:%d",RomanToInt(string));
  50. return 0;
  51. }

心得分析:虽然这不是最好的办法,但是容易想到,并且代码比较好实现。

如果你们有好的办法,记得说一下哦!观看了,麻烦点个赞哦!

题目来源:https://leetcode-cn.com/problems/roman-to-integer/

发表评论

表情:
评论列表 (有 0 条评论,201人围观)

还没有评论,来说两句吧...

相关阅读