罗马数字转整数算法题解

先看题目

 给定一个罗马数字,将其转换成整数,我的思路首先是将罗马数字转换成相应的数字,这里可以使用swich...case语句,然后如果第一个数字比第二个大,第二个比第三个大,则将其对应相加起来,如果第一个数比第二个小,则考虑用后面的数减去前面的数而得到答案。例如:VI=5+1=6,IV=5-1=4;返回最后结果得到答案,。

现在看一下代码部分

int romanToInt(char * s){

    int cur = 0,last = 0,i,num = 0;//cur为当前的数字 last为前一个数字

    int len = strlen(s);

    last = 1000;//开始last默认为最大的数字

    for(i = 0; i < len; i++)

    {

        switch(s[i])

        {

            case 'I': cur = 1;break;

            case 'V': cur = 5;break;

            case 'X': cur = 10;break;

            case 'L': cur = 50;break;

            case 'C': cur = 100;break;

            case 'D': cur = 500;break;

            case 'M': cur = 1000;break;

        }

        if(cur <= last)

        {

            num += cur;//数字正常顺序的时候累加

        }

        else

        {//当上一个罗马数字小于当前罗马数字的时候 进行累减

            num += cur - last;

            if(i)

            num -= last;//如果从第二个开始就要累减 因为上一次循环已经加了一次last 所以累减的时候要将其减掉

        }

        last = cur;

    }

    return num;

}


这个算法主要运用到了swich..case语句,以及if选择结构语句。总体来说不是很难,属于是直接暴力开解,但是如果要提高运算效率的话,还是有一定难度的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值