主题:[转帖]拆数在程序设计中的运用
所谓拆数,指的是将一个整数各个数位上的数字分别求出来的方法(即表达式)。例:一个三位数ABC,其百位数字A=INT(ABC/100),十位数字B=(ABC MOD 100)\10,个位数字C=ABC MOD 10。灵活地使用拆数,再结合循环语句使用,能顺利解决有关数字判断问题程序的编写,使得原本抽象、复杂的问题变得简单化了,从而激发自己学习QBASIC编程的兴趣。
例1:打印所有的水仙花数。
分析:所谓的水仙花数是指这样的一个三位数,其各位数字立方之和等于这个数本身。很显然,从最小的三位数100到最大的三位数999循环取数,再逐一进行拆数,并进行条件判断其各位数字立方之和是否等于这个三位数。QBASIC源程序编写如下:
CLS
FOR I=100 TO 999
A=INT(I/100)
B=(I MOD 100)\10
C=I MOD 10
IF A*A*A+B*B*B+C*C*C=I THEN PRINT I,
NEXT I
END
运行结果:
153 370 371 407
例2:打印1000以内所有的同构数。
分析:所谓的同构数是指这个数的平方数的右边与其相同。从定义出发,要找出这样的数,从1到1000循环取数,逐一得到这个数的平方数,再将这个平方数与10或100或1000取余,得到其右边1位或2位或3位,判断是否和这个数相同即可。QBASIC源程序编写如下:
CLS
FOR I=1 TO 1000
X=I*I
IF X MOD 10=I OR X MOD 100 =I OR X MOD 1000=I THEN PRINT I,
NEXT I
END
运行结果:
1 5 6 25 76
376 625
例3:四位数2025有一个特殊的性质,它的前两位数字20和后两位数字25的和是45,而45的平方恰为2025,编程找出所有的这样的数。
分析:显然,解决本题的关键还是拆数,通过将这个四位数与100取整得到前两位数字,与100取余得到后两位数字,然后再判断它们的平方之和是否等于这个四位数即可。结合循环语句,QBASIC源程序编写如下:
CLS
FOR I=1000 TO 9999
A= X \100
B=X MOD 100
IF (A+B)*(A+B)=X THEN PRINT I,
NEXT I
END
运行结果:
2025 3025 9801
由此可见,拆数在程序设计运用中很重要,同学们在学习中应掌握并灵活使用。有关这样题目很多,因篇幅有限也就不再一一列举了。
(南昌市金盘路小学 汪海浪 徐彩虹)
例1:打印所有的水仙花数。
分析:所谓的水仙花数是指这样的一个三位数,其各位数字立方之和等于这个数本身。很显然,从最小的三位数100到最大的三位数999循环取数,再逐一进行拆数,并进行条件判断其各位数字立方之和是否等于这个三位数。QBASIC源程序编写如下:
CLS
FOR I=100 TO 999
A=INT(I/100)
B=(I MOD 100)\10
C=I MOD 10
IF A*A*A+B*B*B+C*C*C=I THEN PRINT I,
NEXT I
END
运行结果:
153 370 371 407
例2:打印1000以内所有的同构数。
分析:所谓的同构数是指这个数的平方数的右边与其相同。从定义出发,要找出这样的数,从1到1000循环取数,逐一得到这个数的平方数,再将这个平方数与10或100或1000取余,得到其右边1位或2位或3位,判断是否和这个数相同即可。QBASIC源程序编写如下:
CLS
FOR I=1 TO 1000
X=I*I
IF X MOD 10=I OR X MOD 100 =I OR X MOD 1000=I THEN PRINT I,
NEXT I
END
运行结果:
1 5 6 25 76
376 625
例3:四位数2025有一个特殊的性质,它的前两位数字20和后两位数字25的和是45,而45的平方恰为2025,编程找出所有的这样的数。
分析:显然,解决本题的关键还是拆数,通过将这个四位数与100取整得到前两位数字,与100取余得到后两位数字,然后再判断它们的平方之和是否等于这个四位数即可。结合循环语句,QBASIC源程序编写如下:
CLS
FOR I=1000 TO 9999
A= X \100
B=X MOD 100
IF (A+B)*(A+B)=X THEN PRINT I,
NEXT I
END
运行结果:
2025 3025 9801
由此可见,拆数在程序设计运用中很重要,同学们在学习中应掌握并灵活使用。有关这样题目很多,因篇幅有限也就不再一一列举了。
(南昌市金盘路小学 汪海浪 徐彩虹)