回 帖 发 新 帖 刷新版面

主题:[转帖]拆数在程序设计中的运用

所谓拆数,指的是将一个整数各个数位上的数字分别求出来的方法(即表达式)。例:一个三位数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
    由此可见,拆数在程序设计运用中很重要,同学们在学习中应掌握并灵活使用。有关这样题目很多,因篇幅有限也就不再一一列举了。

                          (南昌市金盘路小学   汪海浪   徐彩虹)

回复列表 (共2个回复)

沙发

拆数的意义只在于
a$=str$(a)
l=len(a$)
dim s$(l)
for i=o to l
  s$(i)=mid$(a$,i,1)
next
这才是拆数,什么水仙花什么2025的做题目考试呀?

板凳

你们谁能帮我做一个VF的程序  1~1000之间的同构数   做一个加100分呢  
[em11]

我来回复

您尚未登录,请登录后再回复。点此登录或注册