不使用+ - * /,来进行加法运算;判断一个字符串是不是合法的数字

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

刚开始想到的是利用,数组或者字符串的插入删除操作,来进行求解,但是,考虑了一下,情况太多,一时间,插入删除的情况,数组又存在越界的情况所以有点麻烦,就放弃了,但是要是说写的话,其实也是可以写的,只是比较麻烦。

接着是利用++,–,虽然说是不使用±*/,但是++,–不算在里面的,这个算是取巧的写法,不值得参考。

class Solution {
public:
int Add(int num1, int num2)
{
    if(num1 > 0)
    {
        while(num1-- != 0)
        {
            num2++;
        }
    }
    else if(num1 < 0)
    {
        while(num1++ != 0)
        {
            num2--;
        }
    }
    return num2;
    }
};

接着比较正规的写法就是利用位操作符
第二种解法:

class Solution {
public:
    int Add(int num1, int num2)
    {
        while(num1 != 0)
        {
            int temp = num1 ^ num2;
            num1 = (num1 & num2 )<< 1;
            num2 = temp;
        }
        return num2;
    }
};

第二题:
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。

情况比较多,需要仔细划分。

class Solution {
public:
    bool isNumeric(char* string)
    {
        bool zhengfuhao = false, fuhao_E = false,xiaoshudian = false;
        for(int i = 0; i < strlen(string);++i)
        {
            if(string[i] == 'E' || string[i] == 'e') //关于E/e符号的处理
            {
                if(i == strlen(string) - 1) //如果E/e后面不再有数字,直接返回错误
                {
                    return false;
                }
                if(fuhao_E)  //如果是第二次出现E/e直接返回错误
                {
                    return false;
                }
                fuhao_E = true;
            }
            //+-号的问题
            else if(string[i] == '+' || string[i] == '-')
            {
                //第二次出现正负号,前面必须跟e/E否则报错
                if(zhengfuhao && string[i - 1] != 'e' && string[i - 1] != 'E')
                {
                    return false;
                }
                //假如+-号不是在第一个字符出现,但是第一次出现+-号那么他的前面一定要是e/E
                else if(!zhengfuhao && i > 0 && string[i - 1] != 'e' && string[i - 1] != 'E')
                {
                    return false;
                }
                zhengfuhao = true;
            }
            else if(string[i] == '.')
            {
                if(fuhao_E || xiaoshudian)  //E/e后面不能出现小数点,所以当E已经存在的时候再出现小数点,或者小数点已经存在的时候再出现小数点返回错误
                {
                    return false;
                }
                xiaoshudian = true;
            }
            else if( string[i] < '0' || string[i] > '9')
                return false;
        }
        return true;
    }
};
发布了230 篇原创文章 · 获赞 28 · 访问量 9302

猜你喜欢

转载自blog.csdn.net/weixin_43767691/article/details/103816786