【问题标题】:Best methods with working with integers? [closed]处理整数的最佳方法? [关闭]
【发布时间】:2017-03-15 20:38:08
【问题描述】:

关于涉及整数和整体编码的技术,我有几个问题。

例如,如果我必须修改或检查整数,我将数字的数字保存在向量中,然后使用它们,然后在必要时将它们重新组合在一起,但是,我认为这有点不切实际。

有一个任务,我必须编写一个函数,从整数中删除零并返回相同的数字但不包含零。

int removeZeros(int n) {
    std::vector<int> v;

    while(n != 0) {
        v.push_back(n%10);
        n /= 10;
    }

    for(int i = 0; i < v.size(); i++) {
        if(v[i] == 0) {
            v.erase(v.begin() + i);
            i--;
        }
    }

    for(int i = v.size() - 1; i >= 0; i--) {
        n *= 10;
        n += v[i];
    }
    return n;
}

这段代码运行良好,但我不确定它是否“写”得好、效率高。

你觉得这个方法好,够高效吗?还是有更好、更方便的方法来处理(或修改)整数?

你能给我一些关于如何成为更高效的编码员的提示吗?

谢谢

【问题讨论】:

  • 我投票结束这个问题,因为关于编码风格的问题更适合 CodeReview.stackexchange.com。

标签: c++ vector int


【解决方案1】:

您完全可以不使用vectors 来做到这一点 - 只是数学。

long int NoZeros(long int num) {
    bool sign = num < 0;

    long int ret = 0, running = 1;
    while (num) {
        if (num % 10) {
            ret += running * (num % 10);
            running *= 10;
        }
        num /= 10;
    }
    return sign?-num:num;
}

【讨论】: