palindrome(回文)是指正读和反读都一样的数或文本。例如:11、121、12321等。
编写程序,求10到10000之间所有回文数并输出。
算法设计思想:首先我们用
除法指令来分离所要判断的整数的每一位,即就是把要判断的整数与10做除法,取其余数,再将执行除法指令后的整数部分继续与10相除取余,这样循环执行下去,直到取整为0,再将所有余数重新组合得到的整数相当于是原整数的
逆序序列,所以我们只需要将分离后的整数与原整数进行比较,如果相等,则说明待判断的整数是回文数。
算法描述:
if 被除数=10 to 10000 do
{ num=被除数;
newnum=0;
while num !=0 do
{ num = num/10; //取整
rem = num%10; //取余
newnum=newnum *10 + rem; //余数拼成的新整数
}
if newnum==被除数 then 输出newnum;
}
汇编语言程序实现:
.data
num dword ?
output byte '%d',0ah
.code
main proc
mov ecx,10
start:
cmp ecx,10000
ja finish
mov eax,ecx //eax保存待判断整数
mov ebx,10
mov esi,0
again:
cmp eax,0
jz next //eax=0时说明整数分离完毕
xor edx,edx
div ebx //执行div后,整数部分默认保存在eax中,余数保存在edx中
imul esi,10 //执行双操作数乘法,结果保存在esi中
add esi,edx //esi=esi*10+edx
jmp again
next:
cmp esi,ecx //将分离后得到的新整数(即原整数的逆序序列)与原整数比较
je done
inc ecx
jmp start
done:
mov num,ecx
pushad
invoke printf,offset output,num
popad
inc ecx
jmp start
finish:
ret
main endp
end main