AOJ Roman Figure
ローマ数字をアラビア数字に変換する問題。
ローマ数字は後ろから計算したほうが変換は楽です。
後ろから見てそこまでの最大の数より小さいなら引く。
大きいか同じなら足す。
それだけです。
#include<stdio.h>
#include<string.h>
int to_num(char c){
int n;
if(c=='I')n=1;
if(c=='V')n=5;
if(c=='X')n=10;
if(c=='L')n=50;
if(c=='C')n=100;
if(c=='D')n=500;
if(c=='M')n=1000;
return n;
}
int main(){
char cs[101];
while(scanf("%s",cs)!=EOF){
int n=0,ans=0,len=strlen(cs)-1;
n=ans=to_num(cs[len]);
for(int j=len-1;j>=0;j--){
int m=to_num(cs[j]);
if(m<n){
ans-=m;
}else if(m>n){
ans+=m;
n=m;
}else{
ans+=m;
}
}
printf("%d\n",ans);
}
}
最終更新:2015年08月20日 03:44