Adding Reversed Numbers,spoj 42

Adding Reversed Numbers,spoj 42

42. Adding Reversed Numbers

Problem code: ADDREV

The Antique Comedians of Malidinesia prefer comedies to tragedies. Unfortunately, most of the ancient plays are tragedies. Therefore the dramatic advisor of ACM has decided to transfigure some tragedies into comedies. Obviously, this work is very hard because the basic sense of the play must be kept intact, although all the things change to their opposites. For example the numbers: if any number appears in the tragedy, it must be converted to its reversed form before being accepted into the comedy play.

Reversed number is a number written in arabic numerals but the order of digits is reversed. The first digit becomes last and vice versa. For example, if the main hero had 1245 strawberries in the tragedy, he has 5421 of them now. Note that all the leading zeros are omitted. That means if the number ends with a zero, the zero is lost by reversing (e.g. 1200 gives 21). Also note that the reversed number never has any trailing zeros.

ACM needs to calculate with reversed numbers. Your task is to add two reversed numbers and output their reversed sum. Of course, the result is not unique because any particular number is a reversed form of several numbers (e.g. 21 could be 12, 120 or 1200 before reversing). Thus we must assume that no zeros were lost by reversing (e.g. assume that the original number was 12).

Input

The input consists of N cases (equal to about 10000). The first line of the input contains only positive integer N. Then follow the cases. Each case consists of exactly one line with two positive integers separated by space. These are the reversed numbers you are to add.

Output

For each case, print exactly one line containing only one integer - the reversed sum of two reversed numbers. Omit any leading zeros in the output.

Example

Sample input: 

3
24 1
4358 754
305 794

Sample output:

34
1998
1


一段时间没写汇编了,使用输入缓冲提高效率。。。


  1  ; spoj42.s
  2 
  3  % define  L   1024
  4 
  5  section .bss
  6          pBuf  : resb  L
  7          pBufN : resd  1
  8          pBufI : resd  1
  9 
 10  section .text
 11          global _start
 12 
 13  _start : 
 14          mov dword[pBufN],  0x0
 15          mov dword[pBufI],  0x0
 16          call inInt
 17  CASE : 
 18          test eax, eax
 19          jz EXIT
 20          dec eax
 21          push eax
 22 
 23          call inIntR
 24          push eax
 25          call inIntR
 26          pop ebx
 27          add eax, ebx
 28          call outIntLnR
 29 
 30          pop eax
 31          jmp CASE
 32  EXIT : 
 33          mov eax,  0x1
 34          mov ebx,  0x0
 35           int   0x80
 36 
 37  in  eax
 38  inChar : 
 39          mov eax, [pBufI]
 40          mov ebx, [pBufN]
 41          cmp eax, ebx
 42          jne NOEMPTY
 43          mov eax,  0x3
 44          mov ebx,  0
 45          mov ecx, pBuf
 46          mov edx, L
 47           int   0x80
 48          mov [pBufN], eax
 49          mov dword[pBufI],  0
 50          xor eax, eax
 51  NOEMPTY : 
 52          mov ebx, eax
 53          inc ebx
 54          mov [pBufI], ebx
 55          add eax, pBuf
 56          mov bl,  byte [eax]
 57          xor eax, eax
 58          mov al, bl
 59          ret
 60 
 61  in  eax
 62  inInt : 
 63          xor eax, eax
 64          push eax
 65  SKIPSPACE : 
 66          call inChar
 67          cmp al,  ' 0 '
 68          jb SKIPSPACE
 69          cmp al,  ' 9 '
 70          ja SKIPSPACE
 71  INDIGIT : 
 72          mov ebx, eax
 73          pop eax
 74          mov ecx,  0xA
 75          xor edx, edx
 76          mul ecx
 77          sub ebx,  ' 0 '
 78          add eax, ebx
 79          push eax
 80 
 81          call inChar
 82          cmp al,  ' 0 '
 83          jb INDIGITEND
 84          cmp al,  ' 9 '
 85          ja INDIGITEND
 86          jmp INDIGIT
 87  INDIGITEND : 
 88          pop eax
 89          ret
 90 
 91  in  eax
 92  inIntR : 
 93          xor eax, eax
 94          push eax
 95          mov eax,  0x1
 96          push eax
 97  SKIPSPACER : 
 98          call inChar
 99          cmp al,  ' 0 '
100          jb SKIPSPACER
101          cmp al,  ' 9 '
102          ja SKIPSPACER
103  INDIGITR : 
104          sub eax,  ' 0 '
105          pop ebx
106          xor edx, edx
107          mul ebx
108          pop ecx
109          add eax, ecx
110          push eax
111          mov eax, ebx
112          mov ecx,  0xA
113          xor edx, edx
114          mul ecx
115          push eax
116          
117          call inChar
118          cmp al,  ' 0 '
119          jb inIntRend
120          cmp al,  ' 9 '
121          ja inIntRend
122          jmp INDIGITR
123  inIntRend : 
124          pop eax
125          pop eax
126          ret
127 
128  out  eax
129  outIntLnR : 
130          push ebp
131          mov ebp, esp
132          sub esp,  100
133          mov ebx, esp
134  ZEROBEG : 
135          test eax, eax
136          jz ZEROEND
137          mov ecx,  0xA
138          xor edx, edx
139          div ecx
140          add edx,  ' 0 '
141          mov  byte [ebx], dl
142          inc ebx
143          jmp ZEROBEG
144  ZEROEND : 
145          mov eax, esp
146  ZEROSKIP : 
147          mov cl,  byte [eax]
148          cmp cl,  ' 0 '
149          jnz ZEROSKIPEND
150          inc eax
151          jmp ZEROSKIP
152  ZEROSKIPEND : 
153          mov  byte [ebx],  0xA
154          inc ebx
155          mov edx, ebx
156          sub edx, eax
157          mov ecx, eax
158          mov eax,  0x4
159          mov ebx,  0x1
160           int   0x80
161 
162          mov esp, ebp
163          pop ebp
164          ret
165 

你可能感兴趣的:(Adding Reversed Numbers,spoj 42)