标签:
这道题是把罗马数字转换为阿拉伯数字,转换的方法是:首先把每一个关键字母映射为阿拉伯数字,即I是1、V是5、X是10、L是50、C是100、D是500、M是1000.然后每一位的阿拉伯数字与其后面的(假如有的话)比较,如果不小于,则加上当前的数字,如果小于后面的数字,则加上两者的差,代码如下:#include<stdio.h> #include<string.h> #include<stdlib.h> int romanToInt(char *s) { int length=strlen(s),i=0,sum=0; int b[20]={0}; for(i=0;i<length;i++) { switch(s[i]) { case 'I': b[i]++; continue; case 'V': b[i]+=5; continue; case 'X': b[i]+=10; continue; case 'L': b[i]+=50; continue; case 'C': b[i]+=100; continue; case 'D': b[i]+=500; continue; case 'M': b[i]+=1000; continue; default: break; } } i=0; if(length==1) return b[0]; else { while(i<length) { if(b[i]>=b[i+1]) { sum+=b[i]; i++; } else { sum+=(b[i+1]-b[i]); i+=2; } } return sum; } } int main() { char a[20]; while(scanf("%s",a)!=EOF) { printf("%d\n",romanToInt(a)); memset(a,0,20); } return 0; }
标签:
原文地址:http://blog.csdn.net/zyh920521/article/details/44698695