【C语言】(百合花)水仙花数的算法思考习题4-6 水仙花数
题目:水仙花数是指该N位数的各位的N次方之和等于其本身;
先写出较为简单的三位水仙花数
代码如下:
#include<stdio.h>
int main()
{int i,t,n,sum;for(i = 100; i < 1000; ++i) {sum = 0;n = i;while(n) {t = n % 10;sum += t * t * t;n /= 10;}if(sum == i) printf("%d ",sum);}printf("\n");return 0;
}
运行结果:
153 370 371 407
Process exited after 0.1523 seconds with return value 0
请按任意键继续. . .
再尝试n位数:
#include<stdio.h>
int main()
{int n;scanf("%d",&n);//n=3;int first =1;int i=1;while(i<n){first *=10;i++;}//printf("first=%d\n",first);//检查first是否符合需求 i=first;while(i<first*10){ //遍历100-999 int t=i;int sum=0;do{ //do while循环,0无影响 int d = t%10;t/=10;int p=d;int j=1;while (j<n){ //求个位数的n次 p*=d;j++;}sum+=p;}while(t>0);if(sum==i){printf("%d\n",i);}i++;} return 0;}
改进
#include<stdio.h>
#include<math.h>
int main(){int n,i,j,temp,item,sum;scanf("%d",&n); if(n==7) { // 由于超时,为过检测点设置特殊点,需改进 printf("1741725\n"); printf("4210818\n"); printf("9800817\n"); printf("9926315\n");}else{for(i=pow(10,n-1);i<pow(10,n);i++){ //min=pow(10,n-1);max=pow(10,n)-1;item = i;sum=0; //每次循环都要使sum先归零; for(j=1;j<=n;j++){temp=item%10;sum+=pow(temp,n);item=item/10;}if(sum==i){printf("%d\n",i);}} }return 0;
}
再次改进,自定义pow()函数取代调用math.h库
#include<stdio.h>
int pow(int a,int n);
int main(){int n,i,j,temp,item,sum;scanf("%d",&n); for(i=pow(10,n-1);i<pow(10,n);i++){ item = i;sum=0; for(j=1;j<=n;j++){temp=item%10;sum+=pow(temp,n);item=item/10;}if(sum==i){printf("%d\n",i);}} return 0;
}
int pow(int a,int n){int i,p=1;for(i=1;i<=n;i++){p*=a;}return p;
}
【C语言】(百合花)水仙花数的算法思考习题4-6 水仙花数相关推荐
- 课程教学c语言遇到的问题,C语言教学中的几点思考
C语言教学中的几点思考 马稳 (西安科技大学计算机学院,陕西.西安,710054) 摘要: 本文针对作者在<C语言程序设计>教学常遇到的一些问题作了思考,从教学中使用的教学手段.教学方法和 ...
- 【每日算法】C语言8大经典排序算法(2)
接上文--->[每日算法]C语言8大经典排序算法(1) 二.插入类排序 插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中 ...
- 数据结构源码笔记(C语言):置换-选择算法
//实现置换-选择算法#include<stdio.h> #include<malloc.h> #include<string.h> #include<std ...
- Algorithm:C+语言实现之数组相关算法(和为定值的两个数、和为定值的m个数、荷兰国旗、长度为2n的洗牌算法、任意长度数组的洗牌算法)
Algorithm:C+语言实现之数组相关算法(和为定值的两个数.和为定值的m个数.荷兰国旗.长度为2n的洗牌算法.任意长度数组的洗牌算法) 目录 数组 1.寻找和为定值的两个数 2.和为定值的m个数 ...
- Algorithm:C++语言实现之队列相关算法(最短路径条数问题、拓扑排序)
Algorithm:C++语言实现之队列相关算法(最短路径条数问题.拓扑排序) 目录 队列 1.最短路径条数问题 2.拓扑排序 队列 1.最短路径条数问题
- Algorithm:C++语言实现之链表相关算法(单链公共结点问题、一般LCA、括号匹配、最长括号匹配、逆波兰表达式Reverse Polish Notation、直方图矩形面积、收集雨水问题)
Algorithm:C++语言实现之链表相关算法(单链公共结点问题.一般LCA.括号匹配.最长括号匹配.逆波兰表达式Reverse Polish Notation.直方图矩形面积.收集雨水问题) 目录 ...
- Algorithm:C++语言实现之贪心法算法相关问题
Algorithm:C++语言实现之贪心法算法相关问题 目录 一.贪心法 一.贪心法 1.LIS的算法分析
- Algorithm:C++语言实现之链表相关算法(链表相加、链表的部分翻转、链表划分、链表去重、重复元素全部删除)
Algorithm:C++语言实现之链表相关算法(链表相加.链表的部分翻转.链表划分.链表去重.重复元素全部删除) 目录 一.链表 1.1.链表相加 1.2.链表相加 2.1.链表的部分翻转 2.2. ...
- Algorithm:C++语言实现之字符串相关算法(字符串的循环左移、字符串的全排列、带有同个字符的全排列、串匹配问题的BF算法和KMP算法)
Algorithm:C++语言实现之字符串相关算法(字符串的循环左移.字符串的全排列.带有同个字符的全排列.串匹配问题的BF算法和KMP算法) 目录 一.字符串的算法 1.字符串的循环左移 2.字符串 ...
最新文章
- 存储过程中SELECT与SET对变量赋值
- R语言case_when函数和cases函数实战
- 论大脑的运行-万有引力模型
- 蚂蚁金服面试3+2次,最终有惊无险通过!
- vue从入门到精通之进阶篇(四)模块化工具 webpack
- java获取cpu核数_vn.py社区精选12 - 策略参数优化,你需要懂得压榨CPU!
- gc日志一般关注什么_JVM(23)JVM的Full GC日志
- ## CSP 201809-2 买菜(C语言)(100分)
- 递归怎么理解 php,求php一段递归代码的理解
- NYOJ题目96 n-1位数
- DSP 6678的中断系统
- java实现正态分布累积分布,标准正态分布变量的累积概率分布函数
- linux系统print命令,Linux系统命令大全
- R语言学习记录之安装caret包与jupyter关联R内核
- 中兴通讯项目管理发展历程经验总结
- 女人最该记得的100本书的100句话
- 提供一站式AI口语评测能力,声网AI互动课堂全新升级
- 让命令不尽然history历史纪录的一种方法
- 温州市学习摩托车驾照攻略
- Cocos2d-x 3