【问题标题】:Iterating through a bignum - Ruby [closed]遍历 bignum - Ruby [关闭]
【发布时间】:2013-11-28 17:42:39
【问题描述】:

我有一个 309 位整数,我想遍历它的字符。

目前我正在使用:

require 'openssl'
e = 116505013962726356794269846667188147473899121100449069443844506823885859211073843523906823741034558875724969276233769835502344452366515593952571468651971447660633083078837371793388842846199643249996094940742465135064478448126948741186882484457847959126808512823416166517945252986434515406363102297514031583117

我有:

e.times do |i|
   ...
end

这会产生错误,这是可以理解的:

undefined method `times' for #<OpenSSL::BN:0x007fec05002140>

我试图将 bignum 转换为整数:

 e.to_i.times do |i|
   ...
 end

返回:

bignum too big to convert into `long'

我明白为什么会收到这些错误,但我想问的是如何遍历如此大数字的每个字符?

【问题讨论】:

  • 迭代 e 次将带你到时间的尽头。
  • 您的意思是“迭代以 10 为基数表示的数字(作为字符)”(当前答案地址)还是其他?
  • 我觉得不实用。即使有办法做到这一点,我认为迭代结束时你也不会活着。
  • 目前处理一些加密事物是有界限的,所以我猜这么大的迭代很常见。

标签: ruby biginteger bignum


【解决方案1】:

这是怎么回事?

e = 116505013962726356794269846667188147473899121100449069443844506823885859211073843523906823741034558875724969276233769835502344452366515593952571468651971447660633083078837371793388842846199643249996094940742465135064478448126948741186882484457847959126808512823416166517945252986434515406363102297514031583117
e.to_s.each_char do |c|
    # code
end

【讨论】:

  • 成功了,谢谢!
  • 已经有一个 each_char 迭代器。 e.to_s.each_char{|c| ... }
  • @AndyV 感谢您指出正确的方法... :) 有一段时间我忘记了..
  • @Derptacos - 如果这个答案对你有帮助,请给它打勾。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
  • 2014-02-24
  • 1970-01-01
相关资源
最近更新 更多