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); } }