原谅标题,我找不到更好的方式来表达这个问题。无论如何,我没有任何错误,但我想知道是否有办法简化这个:
#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;
}
到我不需要声明两个单独的整数来输出石头数和余数(磅)。有没有办法以更好的方式做到这一点?
答案 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