题目:
水仙花数
类别
流程控制
时间限制
2S
内存限制
10000Kb
问题描述
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。
(例如:1^3 + 5^3 + 3^3 = 153)。
定义一个函数int function(int a, int b),计算区间[a,b]或区间[b,a]上水仙花数的个数。
输入说明
输入由两个整数a和b构成,a和b之间用空格分隔。0<a,b<10000
输出说明
输出区间[a,b]或区间[b,a]上水仙花数的个数。
输入样例
3 1000
输出样例
4
提示
a,b的位数n可能小于3
全码://
#include <stdio.h>
int function(int a, int b);
int main() {
int a, b, c;
scanf("%d %d", &a, &b);
c = function(a, b);
printf("%d", c);
return 0;
}
int function(int a, int b) {
int n = 0, i, j, k, ws = 1, dj = 0;
int sz[200] = { 0 }, jg[200] = { 1 }, h = 0;
if (a < b) {
j = a;
a = b;
b = j;
}
if (a < 100 && b < 100) {
return 0;
}
else if (a > 100) {
if (b < 100) {
b = 100;
}
for (i = b; i <= a; i++) {//按a>b做的
dj = i;//nok
for (j = 10; dj >= 10; ws++) {//求位数
dj = dj / j;
}
dj = i;
for (j = 1; j < ws + 1; j++) {//求每一位上的数
sz[j] = dj % 10;
dj = dj / 10;
}
for (j = 1; j < ws + 1; j++) {//求各数幂次结果
for (k = 1; k < ws + 1; k++) {
jg[j] = jg[j] * sz[j];
}
}
for (j = 1; j < ws + 1; j++) {//求和
h = jg[j] + h;
}
if (h == i) {//判断
n++;
}
//还原
for (j = 0; j < ws + 1; j++) {//遍历还原
sz[j] = 0;
}
for (j = 0; j < ws + 1; j++) {//同上
jg[j] = 1;
}
ws = 1;
h = 0;
}
}
return n;
}
//