Leetcode C语言 罗马数字转整数

#include<stdio.h>
void calc(int index);
int romanToInt(char * s,int* index);
int findIndex(char x);
void minusCalc(int index,int nextIndex,int* currIndex);

int nums[] = {1,5,10,50,100,500,1000};
int result = 0;
int main(){
    int index = 0;
    char* p = "MCMXCIV";
    int result = romanToInt(p,&index);
}
int romanToInt(char * s,int* index){
    
    char x = s[*index];
    char next = s[*index+1];
    while(x!= '\x00'){
        int tempIndex = *index+1;
        char next = s[tempIndex];
        int xIndex = findIndex(x);
        if(next == '\x00'){
            calc(xIndex);
            break;
        }
        int nextIndex = findIndex(next);
        if((xIndex < nextIndex) && nextIndex - xIndex  > 2){
            return -1;
        }
        if((xIndex < nextIndex) && nextIndex - xIndex  <= 2){
            //minusCalc;
            minusCalc(xIndex,nextIndex,index);
        }else{
            calc(xIndex);
        }
        
        x = s[++(*index)];
    }
    return result;
}
int findIndex(char x){
    char romans[] = {'I','V','X','L','C','D','M'};
    for(int i = 0; i < 7; i++){
        if(romans[i] == x){
            return i;
        }
    }
    return -1;
}
void calc(int index){
    result = result+ nums[index];
}
void minusCalc(int index,int nextIndex,int* currIndex){
    result = result + nums[nextIndex] - nums[index];
    (*currIndex)++;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值