How to calculate the sum of 2 numbers with BrainFuck

前端 未结 7 752
独厮守ぢ
独厮守ぢ 2020-12-09 06:01

I\'m trying to write a program with BrainFuck that can read two numbers up to 9, calculate the sum of them and then print the result out, e.g. 3 & 5 give the result 8 .

7条回答
  •  长情又很酷
    2020-12-09 06:46

    Numerous people have answered the question already, but since every solution differs a bit, I'll just add mine as well.

    My solution does single digit additions (also if the result is >9). So e.g. for the input "89" it retuns "17". I added quite a lot of comments so it should be relatively easy to understand.

    GitHub link

    [
      A brainfuck program for doing a single digit addition.
    
      Ex. input: '13' -> output: '4'
          input: '99' -> output: '18'
    
      Author: Florian Baierl
    ]
    
    initialize #0 with 48 (ASCII char for '0')
    >++++ ++++
    [
    <++++ ++
    >-
    ]
    
    save input to #1 and #2
    ,>,
    
    substract value from #0 from #1 and #2
    <<
    [
    >-
    >-
    <<-
    ]
    
    move to #1
    >
    
    substract from #1 and add to #2; now the answer is in #2
    [
     ->+<
    ]
    
    since we need to modify the answer afterwards write it to #3 and #6
    as well
    >
    [>+>>>+<<<<-]
    
    
    Is the answer bigger than 9?
    to continue the memory tape should look like this:
    0 1 0 (a) b 0
    with the pointer pointing to a
    
    <+
    >>>+++++ +++++ b is 10
    <              point to a
    
    +>+<           necessary in case a and b are zero
    
    loop to determine whether a or b reach 0 first
    [->-[>]<<]
    
    <[-
       a was bigger or equals b
       the answer is still stored in #6
    
       subtract 10 from #6 (the answer)
       >>>>> ----- -----
    
       write 48 to #4
       <++++ ++++
       [
       <++++ ++
       >-
       ]
       add 48 to #5 and #6
       <
       [->+>+<<]
    
       print out the results
       >+.>.
    
       leave loop (back to #2)
       <<<<
     ]
     <[-
       a was samller so we can simply print the answer out after adding 48 to it
       the answer is still stored in #6
    
       >>
       ++++ ++++
       [
       <++++ ++
       >-
       ]
    
       <
       [
        ->>>>+<<<<
       ]
    
       print #2
       >>>>.
    
       we want to leave the loop so go somewhere with the value '0'
       >
    ]
    

提交回复
热议问题