- 首先拿到这个题,第一感觉就是不想做了,好长啊。
- 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;
}