是否有更好的数学方法在Dart中将数字乘以10 n次,而不是以下(下图)。我不想使用数学库,因为它会有点过分。这没什么大不了的;然而,如果有一个比“for loop”更好(更优雅)的方式,最好是一行,我想知道。
int iDecimals = 3;
int iValue = 1;
print ("${iValue} to power of ${iDecimals} = ");
for (int iLp1 = 1; iLp1 <= iDecimals; iLp1++) {
iValue *= 10;
}
print ("${iValue}");
答案 0 :(得分:2)
你提升到10的权力,你乘以 10的幂。在您的代码中,答案将为iValue * 10^(iDecimals)
,同时提升为幂iValue^10
。
现在,您的代码仍然包含取幂,它的作用是将幂提高到10 iDecimals
,然后乘以iValue
。提高可能会更有效率。 (免责声明:我以前从未写过一行dart代码,而且我没有要测试的解释器,所以这可能不会马上工作。)
int iValue = 1;
int p = 3;
int a = 10;
// The following code raises `a` to the power of `p`
int tmp = 1;
while (p > 1) {
if (p % 2 == 0) {
p /= 2;
} else {
c *= a;
p = (p - 1) / 2;
}
a *= a;
}
a *= t;
// in our example now `a` is 10^3
iValue *= a;
print ("${iValue}");
这个取幂算法非常简单,它被称为Exponentiation by squaring。
答案 1 :(得分:0)
考虑到你不想使用任何数学库,我认为这是计算数字能力的最佳方法。此代码段的时间复杂性似乎也很小。如果您需要一行解决方案,则必须使用一些数学库函数。
顺便说一句,你没有提高能力,只是将数字乘以10 n次。答案 2 :(得分:0)
你是否试图以10的幂乘以某物?如果是这样,我相信Dart支持科学记谱法。因此,上述值将写为:iValue = 1e3;
等于1000.如果你想将数字本身提高到10的幂,我认为你唯一的选择是使用数学库。
答案 3 :(得分:0)
使用数学库。你这样做“过度杀戮”的想法是错误的。以下内容更易于编写,更易于阅读,代码行更少,并且最有可能比您可能用以下内容替换的内容更快:
import 'dart:math';
void main() {
int iDecimals = 3;
int iValue = 1;
print("${iValue} times ten to the power of ${iDecimals} = ");
iValue *= pow(10, iDecimals);
print(iValue);
}
也许您正在部署到JavaScript,关注部署规模,并且不知道dart2js
树摇晃了吗?
最后,如果您做想要将数字提升到10的幂,正如您所要求的那样但是没有做,只需使用pow(iValue, 10)
。
答案 4 :(得分:0)
因为标准是答案需要不需要数学库并且需要快速且理想地是数学解决方案(而不是String),并且因为使用指数解决方案需要太多开销 - String,double,integer,我认为唯一符合标准的答案如下:
for (int iLp1=0; iLp1<iDecimal; iLp1++, iScale*=10);
它非常快,不需要“数学”库,而且是单行