int romanToInt(string s) {
     if(s.length() == 0)
         return 0;
     int ans = 0, temp = getRomanValue(s[0]);
     int curValue, lastValue = temp;
     for(int i = 1; i < s.length(); ++ i)
     {
         curValue = getRomanValue(s[i]);
         if(curValue == lastValue)
             temp += getRomanValue(s[i]);
         if(curValue > lastValue)
             temp = getRomanValue(s[i]) - temp;
         if(curValue < lastValue)
         {
             ans += temp;
             temp = getRomanValue(s[i]);
         }
         lastValue = curValue;
     } 
     return ans + temp;
 }
Esempio n. 2
0
int main()
{
	char romanNumber[20];
	int i, curNum;
	while(1)
	{
		curNum=0;
		printf("Input roman number: ");
		scanf("%s", romanNumber);
		if(checkRomanN(romanNumber)==0)
		{
			printf("Input a valid roman number\n");
			continue;
		}
		for(i=0; i<strlen(romanNumber); i++)
		{
			if(getRomanValue(romanNumber[i])<getRomanValue(romanNumber[i+1]))
			{
				curNum+=getRomanValue(romanNumber[i+1]) - getRomanValue(romanNumber[i]);
				i++;
			}
			else
				curNum+=getRomanValue(romanNumber[i]);
		}
		if(curNum>256)
		{
			printf("Number is larger than 256\n");
			continue;
		}
		else
		{
			printf("Roman number in decimal is: %d\n", curNum);
			break;
		}
	}
	return 1;
}