我一直致力于BigInteger的实施,当我考虑添加解决方案时,我决定采用更清洁的方法,其中考虑在功能中添加相应的数字和"正常化&# 34;他们以后。如下例所示
999 999 + 111 111
= 10 10 10 10 10 10(添加后的值)
= 1 111 110(归一化后的值)
但从那时起,我一直在想它是如何影响该计划的效率的。有几个循环做小事情,每个循环通常比一个大的嵌套循环更快地工作吗? 例如,使用
int a[7]={0,9,9,9,9,9,9};
int b[7]={0,1,1,1,1,1,1};
int c[7];
是吗,
for(int q=0; q<7; ++q){
c[q]=a[q]+b[q];
if(c[q]>9){
c[q-1]=c[q]/10;
c[q]%=10;
}
}
比这更好
for(int q=0; q<7; ++q){
c[q]=a[q]+b[q];
}
for(int q=0;q<7;++q){
if(c[q]>9){
c[q-1]=c[q]/10;
c[q]%=10;
}
}
那么更大的循环呢,每次迭代都要经历更多的事情?
UPD。
有人建议我测量两个例子的表现时间。对于两个循环,平均时间(对于100mil。元素)~4.85sec。一个循环~3.72秒
答案 0 :(得分:0)
很难说这两种方法中哪一种更有效。它可能因C ++编译器供应商和单个供应商(从编译器的版本到版本)而异。
底线是:
除非你做基准测试,否则你永远不会知道。
像往常一样,几乎可以肯定无论如何都无关紧要,在很多情况下,你很可能过分担心性能,就像绝大多数程序员一样。
< / LI>在一天结束时,重要的是更具可读性和更易维护的内容。代码可维护性 远 比保存时钟周期更重要。
如果你决定遵循“更具可读性”的明智之路,请记住不同的人发现不同的东西更具可读性。例如,当我阅读代码时,我个人讨厌意外,所以我会非常恼火地阅读你的第一个循环,它允许十进制数字接收0-9范围之外的错误值,但后来才发现你最终在补救与另一个循环。