【问题标题】:Remove digits from number without reversing the number从号码中删除数字而不反转号码
【发布时间】:2020-03-14 09:57:01
【问题描述】:

我有一个练习,我需要创建一个函数来获取两个参数,数字(long)和数字(int),我必须从数字中删除数字并返回它。

当我做练习时,我将数字反转,最后我再次反转它以获得原始数字。

我想知道是否有一种方法可以在不将数字颠倒两次的情况下进行练习。

long myFunction(long number, int digit){

int tmp = 0;
if (digit <= 9 && digit >= 0){

    while (number != 0){  

        if (number % 10 != digit){

            tmp = (tmp + (number % 10)) * 10;

        }
        number = number / 10;
    }
    tmp = tmp / 10;

    int rev = 0, remainder;
    while (tmp != 0) { // Reverse an Integer

        remainder = tmp % 10;
        rev = rev * 10 + remainder;
        tmp /= 10;
    }
    return rev;

    }
    return number;
}

【问题讨论】:

    标签: c reverse digits


    【解决方案1】:

    另一种方法是跟踪要添加到结果中的数字的位置(将其乘以 10position)。这样,您完成后就不必颠倒数字:

    long removeDigit(long number, int digit) {
        long result = 0L;
        long multiplier = 1L;
        while (number > 0L) {
            int currDigit = (int) number % 10;
            if (currDigit != digit) {
                result += multiplier * currDigit;
                multiplier *= 10;
            }
            number /= 10;
        }
        return result;
    }
    

    【讨论】:

    • 纯逻辑! OP:还有其他方法可以更快,但涉及或假设固定类型和大小:graphics.stanford.edu/~seander/bithacks.html
    • (int) number % 10; 不正确。先执行%,而不是强制转换。 IAC,演员在这里几乎不需要。
    猜你喜欢
    • 2021-08-07
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多