北京网站建设net2006,网络营销总监岗位职责,建设一个完整网站技术路线,什么是营销型网站设计1.水仙花数问题 水仙花数#xff08;Narcissistic number#xff09;也被称为超完全数字不变数#xff08;pluperfect digital invariant, PPDI#xff09;、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数#xff08;Armstrong number#xff09; 水仙花数是指一个 3 位数Narcissistic number也被称为超完全数字不变数pluperfect digital invariant, PPDI、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数Armstrong number 水仙花数是指一个 3 位数它的每个位上的数字的 3次幂之和等于它本身。例如1^3 5^3 3^3 153。 使用C语言编程实现水仙花数的打印 首先水仙花数的范围是三位数创建一个循环范围是100到999
在循环内对每一个数进行判断——
通过取模和整除的方式将三位数的每一位都剥离出来再将每一位的3次方 相加求和与原来的三位数本身进行比较如果相等打印该数
#includestdio.h
int main()
{for (int i 100; i 999; i){int a i % 10;int b i / 10 % 10;int c i / 100; //分别求出整数的每一位int sum a * a * a b * b * b c * c * c;if (sumi)printf(%d , i);}printf(\n);return 0;
} 2.水仙花数问题的拓展任意范围内整数
对水仙花数的范围进行拓展求出各位数字的n次方之和确好等于该数本身的数 解决思路
依然是创建一个for循环这次的范围是10-100000因为10以内的数对于水仙花数的要求是恒成立的所以不在考虑范围内
进入循环之后因为这次不知道当下要判断的是几位数也就不知道每一位应该计算几次方所以要先计算出数字的位数
int count 0;
int temp i;//使用临时变量拷贝数字防止原数字被破坏
while (temp)
{temp temp / 10;//每次整除10消除一位直到原数字为0count;
}
接下来就是计算每一位次方的和这次要借助于pow库函数所以记得添加math.h头文件
——pow函数用于求一个数的n次方函数原型如下 double pow (double base, double exponent); 关于pow函数详细说明参考pow - C 参考 (cplusplus.com) temp i;//对临时变量重新赋初值不能忘记int sum 0;while (temp){sum pow(temp % 10, count);//每次求得当前最后一位数的count次方累加到sum中temp / 10;//求得该位之后去除该位} 最后得到的值存储在sum中再来一个if语句判断 完整代码
#includestdio.h
#includemath.h
int main()
{for (int i 10; i 100000; i){int count 0; //位数计算部分int temp i;while (temp){temp temp / 10;count;}temp i; //水仙花数条件判断部分int sum 0;while (temp){sum pow(temp % 10, count);temp / 10;}if (sum i)printf(%d , i);}return 0;
} 当然为了封装和代码复用的考虑可以将判断的代码放在函数内 优化后代码
#includestdio.h
#includemath.h //powint get(int n)//计算位数
{int count 0;while (n){n / 10;count;}return count;
}int judge(int n)//判断函数
{int temp n;int sum 0;while (temp){sum pow(temp % 10, get(n));temp / 10;}if (sum n)return 1;elsereturn 0;
}int main()
{for (int i 10; i 100000; i){if (judge(i))printf(%d , i);}printf(\n);return 0;
}