Roman Figure

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