1

给定一个任意长的数字,我怎样才能输出它的双精度数?只要结果小于 10,我就知道如何将小数相乘,但是像 32984335 这样的大整数又如何呢?我不知道处理这种事情的正确方法。

4

4 回答 4

5

这是您需要实现的算法:

  1. 当前计数从 0 开始;
  2. 将当前计数乘以 10:这可以通过重复 10 次,然后将所有重复值相加来实现;
  3. 读一个数字;
  4. 如果为空,则继续执行 8;
  5. 将其转换为实际数字:这可以通过减去 48 来实现;
  6. 将其添加到当前计数;
  7. 继续2;
  8. 复制当前计数;
  9. 把骗子加在一起;
  10. 使用重复减法除以十;保持商和余数;
  11. 抓住剩下的;
  12. 将其设为数字​​(加 48);
  13. 打印它;
  14. 从 10 中取商;
  15. 如果不为零,则转到 10;
  16. 结束。

所有这些步骤都包含基本的脑筋急转弯,所以应该很容易实现。

于 2012-07-16T14:31:38.527 回答
0

这是一个开始。它会增加一个字节的输入,但我认为您可以构建它以使其适用于任何数字。基本上,您输入一个数字,并将该数字乘以 (2) 存储在下一个指针中。你循环递减第一个数字,然后嵌套一个循环递减第二个数字;在内部循环的每次迭代中,将指针递增到第二个操作数的右侧。这是你的结果。

,      take input to ptr 0
  [
     -     decrement first operand (input)
     >++   number to multiply by (2) at ptr 1
     [
        >+   result in ptr 2
        <-   decrement second operand (2)
     ]
     <
  ]
>>     move to result
于 2012-07-16T04:26:36.243 回答
0

这是我的BF代码:http: //ideone.com/2Y9pk8

->>+>,+
[
    -----------
    [
        -->++++++[-<------>]<
        [->+<[->+<[->+<[->+<[>----<-<+>[->+<]]]]]]>
        [-<++>]<+
        >,+
        [
            -----------
            [->+<]
        ]
        >[-<+>]<
    ]
    <[<]
    >-[<++++++++[->++++++<]>.[-]]
    >[<++++++++[->++++++<]>-.[-]>]
    ++++++++++.[-]
    <+[-<+]
    ->>+>,+
]

它读取每一行中的每个数字,直到 EOF,并将所有数字乘以 2..

于 2013-03-29T09:30:14.797 回答
0

这是将数字乘以 2 的代码。

,[>++<-]>。

希望这可以帮助。

于 2017-01-22T08:33:21.503 回答