2.5 练习:水仙花数 – 《简单易懂的Dart》

经过前几章的学习,我们已经可以编写一些简单的数学计算程序.

下面我们做一个输出水仙花数的练习巩固之前学习的知识.

什么是水仙花数?

以下内容来自维基百科:

在数论中,水仙花数(Narcissistic number)也称为自恋数、自幂数或阿姆斯壮数(Armstrong number)是指一N位数,其各个数之N次方和等于该数。
例如153、370、371及407就是三位数的水仙花数,其各个数之立方和等于该数:
153 = 13 + 53 + 33。
370 = 33 + 73 + 03。
371 = 33 + 73 + 13。
407 = 43 + 03 + 73。

如何输出100~999中的水仙花数?

首先我们需要一个可以遍历100~999所有整数的循环.

最方便的当然是使用for循环实现:

for(int i=100;i<1000;i++){

}

根据水仙花数的定义,这个数=百位数的立方+十位数的立方+个位数的立方.

在判断前,我们应该先获取判断条件中的 百位数,十位数和个位数.

通过运算符~/可以通过变量i计算出个十百位数,然后我们把这三个数存入int型变量a,b,c.

int a,b,c;
a=i~/100;
b=(i-a*100)~/10;
c=i-a*100-b*10;

由于~/是整除,所以不必担心发生类型冲突.

接着我们写if语句来判断水仙花数:

if(i==a*a*a+b*b*b+c*c*c){

}

现在的代码应该是这样的:

void main(){
  for(int i=100;i<1000;i++){
    int a,b,c;
    a=i~/100;
    b=(i-a*100)~/10;
    c=i-a*100-b*10;
    if(i==a*a*a+b*b*b+c*c*c){

    }
  }
}

最后我们补上一个print来输出这个水仙花数,这样代码就写完了.

void main(){
  for(int i=100;i<1000;i++){
    int a,b,c;
    a=i~/100;
    b=(i-a*100)~/10;
    c=i-a*100-b*10;
    if(i==a*a*a+b*b*b+c*c*c){
      print(i);
    }
  }
}

按下Ctrl+R运行这段程序,输出以下内容:

153
370
371
407

瞧,我们刚刚完成了一个输出100~999水仙花数的程序,它是用Dart编写的,它只有11行.