永发信息网

编程求具有abcd=(ab cd)^2性质的四位数.如3025=(30 25)^2

答案:2  悬赏:0  手机版
解决时间 2021-01-28 15:22
  • 提问者网友:龅牙恐龙妹
  • 2021-01-28 01:23
用VB
最佳答案
  • 五星知识达人网友:等灯
  • 2021-01-28 01:30
data segment x dw ? data ends code segment assume cs:code, ds:data start: mov bx, 999 m: inc bx cmp bx, 10000 jz out1 mov ax, bx mov cl, 100 div cl add al, ah mul al cmp ax, bx jne m call dis jmp m dis: mov x, bx mov cx, 0 mov bx, 10 let1: mov dx, 0 inc cx div bx push dx cmp ax, 0 jnz let1 let0: pop ax add ax, 3030h mov dl, al mov ah, 2 int 21h loop let0 mov dl, 0ah mov ah, 2 int 21h mov dl, 0dh mov ah, 2 int 21h mov bx, x ret out1: mov ah, 4ch int 21h code ends end start
全部回答
  • 1楼网友:琴狂剑也妄
  • 2021-01-28 02:18
最简单的做法是循环10000次求解 for(int i = 0;i<10000;i++) { if(i == (i/100 + i%100)^2) console.writrline(i); } 但是如果这是面试题的话,这么做肯定不好,因为不效率。 所以最好用公式推导,求出ab和cd的关系。 abcd == (ab+cd)^2 100ab+cd == (ab + cd)* (ab + cd) 当ab==cd==0时,恒成立; (ab+cd)>0时,99ab== (ab + cd)* (ab + cd - 1) 所以:设sum=ab+cd,tmp = sum*(sum-1) console.writeline("ab={0},cd={1}",0,0); for( int sum=1;sum<199;sum++) { int tmp = sum*(sum-1); if( (tmp % 99) != 0) break; else { int ab = tmp /99; console.writeline("ab={0},cd={1}",ab,sum - ab); } } 这个循环199次,效率肯定要比循环10000次高。 但是肯定还有更高的,就是在for( int sum=1;sum<199;sum++)里做判断,让sum的每次取值都保证sum*(sum-1)是99的倍数,具体的也没时间细想了,数学题。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯