【发布时间】:2019-03-08 08:44:57
【问题描述】:
void HappyTest()
{
for (int i = 0; i < 2100000000; i++) {
int n = i;
while (n >= 10) {
int m = n, sum = 0;
while (m != 0) {
int t = m >= 10 ? m % 10 : m;
sum += t * t;
m /= 10;
}
n = sum;
}
//return n == 1 || n == 7;
//if (i % 10000000 == 0) {
// cout << i << endl;
}
}
VS2017 Debug Mode Performance analyzer
我用vs2017的性能分析工具拿到图中的数据,发现性能消耗主要是%和*运算。 这部分代码有优化空间吗?
【问题讨论】:
-
如果您告诉我们您要解决什么问题,将会很有帮助。
-
是的。该函数没有效果,所以
void HappyTest() {}是一个非常好的优化。 -
循环可以从
for (int i=11...开始 -
@PaulOgilvie 我也很害怕,但是 0x7D2B7500 与 32 位上的 int 兼容
-
int t = m >= 10 ? m % 10 : m;防止在不需要时采用模数 - 以牺牲管道中断为代价?无论如何,cout表明这不是 C 代码。
标签: c