@up: czekamy na mistrzowskie rozwiązanie rekurencji w BF :D
Ja zarzucam asmem (dokładnie w MASM x86) (nie wiem, czy wypisywania liczb nie dało się szybciej):
.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\masm32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\masm32.lib
.data
num db 1000 dup (0)
output db 11 dup (0)
.code
start:
invoke StdIn, addr num, 997
mov byte ptr [num+eax-2], 0
lea eax, [num]
push eax
xor eax, eax
xor ebx, ebx
call numsum
;na pewno dalo sie zrobic lepiej to wypisywanie liczb
mov ebx, eax
lea edi, [output]
mov esi, 10
petla_pisz_odwrotnie:
cdq
div esi
add dl, 48
mov byte ptr [edi], dl
inc edi
test eax, eax
jnz petla_pisz_odwrotnie
lea esi, [output]
dec edi
petla_odwroc:
mov cl, byte ptr [esi]
mov ch, byte ptr [edi]
mov byte ptr [edi], cl
mov byte ptr [esi], ch
inc esi
dec edi
cmp esi, edi
jl petla_odwroc
invoke StdOut, addr output
invoke ExitProcess, 0
numsum proc
;in ESI wskaznik na liczbe
;out EAX suma cyfr
;EAX=0, EBX=0 (na poczatku)
mov esi, [esp+4]
cmp byte ptr [esi], 0
jne numsumc
ret
numsumc:
mov bl, [esi]
add eax, ebx
sub eax, 48
inc esi
push esi
call numsum
pop esi
ret
numsum endp
end start