一种简化余数的方法

时间:2013-12-06 03:22:12

标签: c++ modulo

原谅标题,我找不到更好的方式来表达这个问题。无论如何,我没有任何错误,但我想知道是否有办法简化这个:

#include <iostream>

int main(void)
{

    const int Lbs_per_stone = 14;

    int lbs;

    std::cout << "Enter your weight in pounds: ";
    std::cin >> lbs;
    int stone = lbs / Lbs_per_stone; // whole stone
    int pounds = lbs % Lbs_per_stone; // remainder in pounds

    std::cout << lbs << " pounds are " << stone << " stone, " << pounds << " 
    pound(s)." << std::endl;

    std::cin.get();
    std::cin.get();

    return 0;
}

到我不需要声明两个单独的整数来输出石头数和余数(磅)。有没有办法以更好的方式做到这一点?

4 个答案:

答案 0 :(得分:2)

了解std::div中声明的<cstdlib>

答案 1 :(得分:1)

如果您不想将它们存储在变量中,请不要:

int main()
{
    const int LBS_PER_STONE = 14;
    int lbs;
    std::cout << "Enter weight in pounds:  ";
    std::cin >> lbs;
    std::cout << "Your weight is " << (lbs / LBS_PER_STONE) << " and " << (lbs % LBS_PER_STONE) << " pounds" << std::endl;
    return 0;
}

答案 2 :(得分:1)

你的意思并不像是:

std::cout << lbs << " pounds are " << (lbs / lbs_per_stone)
     << " stone and " << (lbs % lbs_per_stone) << pound(s)." << std::endl;

保存int(不使用临时工具)的唯一方法是从lbs中扣除石头:

std::cout << lbs << " pounds are ";

int stone = lbs / lbs_per_stone;
lbs -= stone * lbs_per_stone;

std::cout << stone << " stone and " << lbs << pound(s)." << std::endl;

希望这有帮助

答案 3 :(得分:1)

如果这困扰你,你可以做几件事:

使用课程

template <typename T>
struct Div_Mod
{
    Div_Mod(T a, T b) : div(a/b), mod(a % b) { }
    T div, mod;
};

Div_Mod<int> weight(lbs, LBS_PER_STONE);
std::cout << weight.div << ' ' << weight.mod << '\n';

确保最佳机器代码

如果您为了获取每个/%结果而进行机器代码操作而感到困扰,那么您可能不应该这样做 - 您的优化工作者应该注意这一点,但如果你坚持确定你可以使用Pete Becker建议的try std::div et al,它可能会使用该优化,但如果没有,那么寻找编译器或OS提供的instrinsic或使用针对http://x86.renejeschke.de/html/file_module_x86_id_137.html

等指令的CPU特定内联汇编