前言 我这里是Windows10/11专业工作版(其他Windows版本也适用) 如果你的设备是已经是结束支持的Windows7,请查阅其他相关是手册 这里演示的代码为c++代码
水仙花数 概念 水仙花数是指一个3位正整数,其每个位上的数字的3次幂之和等于它本身
问题1-判断是否是水仙花数 分析:满足条件每个位上的数字的3次幂之和等于它本身就是 1、输入你要判断的数字 2、求出每个位上的数字 3、判断 代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include<iostream> #include<cmath> int main(void){ int i ; std::cin>>i; // 输入一个三位数 int a = i%10; //求个位 int b = i/10%10; // 求十位 int c = i /100; // 求百位 if (pow(a,3)+pow(b,3)+pow(c,3) == i ) // 用概念判断一下是否是三位数 std::cout<<"yes"; // 是就输出yes else std::cout<<"no"; // 不是就输出 no return 0; }
问题2-全部的水仙数 分析,在上面的基础山添加了一个信息是:全部即是要遍历一下全部的三位数,代码就变成了下面的结果了
1 2 3 4 5 6 7 8 9 10 11 12 #include<iostream> #include<cmath> int main(void){ for(int i =100;i<=999;i++){ int a = i%10; //求个位 int b = i/10%10; // 求十位 int c = i /100; // 求百位 if (pow(a,3)+pow(b,3)+pow(c,3) == i ) // 用概念判断一下是否是水仙花数 std::cout<<i<<" "; } return 0; }
提升 - 水仙写法 判断是否是水仙花数 这里我们已经知道了位数是三位数,所以,我们就知道了位数是3,那么现在我们就是用水仙写法来解决问题吧! 思路分析: 我们可以将这个数的位数看作循环的次数,那么就知道的循环变量变化的等式是一个整除10的自运算,然后 在每次都涉及到了对数字的每一个位上的数进行3次幂操作,每个位上的数就是这个数和10取余数的结果,再将取好了的余数 进行3次幂操作,最后是用累加起来就达到想要的效果了,我们就得到了下面的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include<iostream> #include<cmath> int main(void){ int i ; std::cin>>i; int temp = i,sum = 0; while(temp){ sum+=pow(temp%10,3); // 计算每个位的三次的和 temp /= 10; // 去掉已经计算的位 } if(sum == i) // 用概念判断一下是否是水仙花数 std::cout<<"yes"; // 是就输出yes else std::cout<<"no"; // 不是就输出 no return 0; }
全部的水仙花数 全部的水仙花数就可以写成下面的效果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include<iostream> #include<cmath> int main(void){ for(int i =100;i<=999;i++){ int temp = i,sum = 0; while(temp){ sum+=pow(temp%10,3); // 计算每个位的三次的和 temp /= 10; // 去掉已经计算的位 } if(sum == i) // 用概念判断一下是否是水仙花数 std::cout<<i<<" "; } return 0; }
拓展 计算数字的位数 得到了这思路我们就可以计算一个数字有多位,及是1个数字有多少个数字组成
1 2 3 4 5 6 7 8 9 10 11 12 #include<iostream> int main(void){ int i ; std::cin>>i; int count= 0; while( i ){ count++; i/=10; } std::cout<<count; return 0; }
判断一个数字是否是回文数 设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。 例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。 分析: 1、求出每个位数的数字 2、累和变量自乘10 3、累和变量加上美每一位上的数字 4、求出的和与原来的数字比较
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include<iostream> int main(void){ int i ; std::cin>>i; int temp = i,sum = 0; while( temp){ sum*=10; //扩大1位 sum += temp%10; temp/=10; } if(sum == i ) // 用概念判断一下是否是回文数 std::cout<<"yes"; // 是就输出yes else std::cout<<"no"; // 不是就输出 no return 0; }
N位水仙花数 概念:指一个n位数,其各位数字的n次方之和确好等于该数本身 分析: 1、求这个数的位数 2、使用判断是否是水仙花数代码就好了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include<iostream> #include<cmath> int main(void){ int i ; std::cin>>i; int temp = i,sum = 0,count=0; // 求位 while( temp ){ count++; temp/=10; } temp =i; // 判断水仙花数 while(temp){ sum+=pow(temp%10,count); // 计算每个位的位数次的和 temp /= 10; // 去掉已经计算的位 } if(sum == i) // 用概念判断一下是否是水仙花数 std::cout<<"yes"; // 是就输出yes else std::cout<<"no"; // 不是就输出 no return 0; }
总结 1、介绍水仙花数的概念 2、水仙花数在两大基本问题 3、水仙写法解决两大基本问题 4、水仙写法的拓展运用
版权声明: 此文章版权归曦曦所有,如有转载,请注明来自原作者