【发布时间】:2014-04-28 00:46:54
【问题描述】:
我试图用 10 进制以外的东西做一些数学运算,并希望从 Dart 社区获得一些关于我可以采取的可能方向的意见。
因此,例如,假设 p = 2。然后,查看以 2 为底的 100:
100 = (1 · 26
) + (1 · 25
) + (0 · 24
) + (0 · 23
) + (1 · 22
) + (0 · 21
) + (0 · 20
)
所以
100 base 2 = 1100100
每个数字加 1 并将答案相乘:
(1 + 1)(1 + 1)(0 + 1)(0 + 1)(1 + 1)(0 + 1)(0 + 1) = 8
尝试 3 次:
100 = (1 · 34
) + (0 · 33
) + (2 · 32
) + (0 · 31
) + (1 · 30
)
所以
100 base 3 = 10201
(1 + 1)(0 + 1)(2 + 1)(0 + 1)(1 + 1) = 12
在 Dart 中,我想出了以下内容;
https://gist.github.com/anonymous/11345381
int rows = 1000000000;
int total = 0;
for(int i = 0 ; i < rows ; i++ ){
total += i.toRadixString(7)
.split('')
.map((s) => int.parse(s) + 1)
.reduce((prev,next) => prev*next);
}
print('${total} results');
这确实有效,并且对于少量行似乎没问题。但是对于更大的数字,它真的很慢。
如图所示,我将 int 转换为字符串(产生数字的字符串表示形式),将其拆分,将拆分的字符映射回 int,将每个 int 加 1,然后将它们全部相乘。
在 Dart 中处理数字时,除了以 10 为基数之外,我是否遗漏了什么?
【问题讨论】:
-
我仍然不希望你真正想做。您只想在不同基数之间转换数字吗?
-
与上面的 2 个示例一样,我通过将其转换为基数 X 来获得 100 的值。然后,使用转换后的值,将每个数字加 1 并将总和相乘。转换为 String 然后再转换回来似乎效率低下。但我不确定我还能如何在 Dart 中做到这一点。我的主要动机是使用大量数字来计算它所花费的时间太慢了。
-
这仍然没有回答我的问题:(你想达到什么目的?将数字转换为其他基数可以这样完成:print((100).toRadixString(2)); print( (100).toRadixString(3)); 1100100 10201
-
您是否只是想以基数 P 显示一个数字,然后将该表示的所有数字与 +1 相加?然后我看不到另一种方式。我问是因为我想了解它背后的数学背景为什么你需要它。
-
尝试将
.split('').map(...)更改为.codeUnits.map((x)=>x-47),看看会有多大的不同。
标签: dart