所以我必须编写一个程序来计算数组中某些元素的总和,然后找到总和的位数(例如,如果几个元素的总和是175,我必须打印的值sum(175)和175(3)的位数)。
要确定我使用以下“while”循环的位数:
while (sum > 0)
{
sum /= 10;
digits++;
}
正如您可能已经注意到的那样,在循环结束时,总和为0.所以我想创建一个“sum”的别名:
int& rSum = sum;
所以我只是在数组中用“rSum”代替“sum”,以便在程序的最后找到数字和打印的总和。无论如何,循环后“sum”的值为0,换句话说,等于“rSum”。所以我想,当你为某个变量创建一个别名,修改别名时,修改变量本身,这在我的情况下是一个问题。
我的问题是,我可以使用别名(或使用引用,指针等)创建程序,还是通过创建“sum”变量(int rSum = sum;
)的副本的唯一方法?
答案 0 :(得分:3)
您的问题看起来像#34;如何在不制作此变量的副本的情况下复制此变量?"。
我认为你的关注度低一级,你认为制作副本会使代码的可读性降低 - 我同意。但你可以非常简单地打击它:
int sum = ...;
int digits = countDigits(sum);
将countDigits
提取到单独的函数仍然会复制sum
变量,因为它是按值复制的(这是正常的),但此副本将是临时的(本地)到countDigits
)并且不会在你的原始功能中造成一个不必要的混乱。
答案 1 :(得分:0)
Skizz在这里提出了一种基于对数的方法: Efficient way to determine number of digits in an integer。 或者看看布拉德的解决方案。 但是,如果您使用分部,则需要一份副本。
答案 2 :(得分:0)
这也会创建sum
的副本,但至少不会是你:
const int& orgSum = sum + 0;
while (sum > 0)
{
sum /= 10;
digits++;
}
cout << orgSum << endl;