编程求具有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的倍数,具体的也没时间细想了,数学题。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯