/*
题目:
水仙花数是指一个 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>
#include <math.h>
int function(int a, int b);
int main()
{
int a, b;
scanf("%d %d", &a, &b);
printf("%d", function(a, b));
return 0;
}
int function(int a, int b)
{
int i, sum, count, j, m, p, q;
for (i=a, count=0; i<=b; i++)
{
for(p=1, q=0; p<i; p*=10)
{
if (i/p>0)
q++;
}
int s = i;
for (j=0, sum=0; j<q; j++)
{
m=i%10;
sum+=pow(m, q);
i/=10;
}
if (sum==s)
count++;
}
return count;
}
运行不出结果,求改错
尝试了另一种写法,还是运行不出来,代码↓
#include <stdio.h>
#include <math.h>
int function(int n);
int main()
{
int a, b, i, count;
scanf("%d %d", &a, &b);
for (i=a<b?a:b, count=0; i<=a<b?b:a; i++)
{
if (function(i)==1)
count++;
}
printf("%d", count);
return 0;
}
int function(int n)
{
int sum, p, q, j, m, k;
for(p=1, q=0; p<n; p*=10)
{
if (n/p>0)
q++;
}
int s=n;
for (sum=0, j=0; j<q; j++)
{
m=n%10;
sum+=pow(m, q);
n/=10;
}
if (sum == s)
k=1;
else
k=0;
return k;
}
题主的代码修改如下,改动处见注释,供参考:
#include <stdio.h>
#include <math.h>
int function(int n);
int main()
{
int a, b, i, count;
scanf("%d %d", &a, &b);
if (a > b) //修改
i = a, a = b, b = i;
for (i = a, count = 0; i <= b; i++)
{
if (function(i)) { //(function(i) == 1) //修改
//printf("%d\n", i);
count++;
}
}
printf("%d", count);
return 0;
}
int function(int n)
{
int sum, p, q, j, m, k;
for (p = 1, q = 0; p < n; p *= 10)
{
//if (n / p > 0) 修改
q++;
}
if (q < 3) return 0; //修改
int s = n;
for (sum = 0, j = 0; j < q; j++)
{
m = n % 10;
sum += pow(m, q);
n /= 10;
}
return sum == s;
// k = 1; //修改
//else //修改
// k = 0; //修改
//return k; //修改
}
//导入头文件
#include<stdio.h>
#include<stdlib.h>
//主函数
int main(){
int i,j,k,n,sumi,sumj,sumk;//定义7个整型数据
printf("\n100-1000 包含的“水仙花”数分别有: \n\n");
for(n=100;n<1000;n++){
//循环求数字个位、十位、百位上的数字
i=n/100;//求百位
j=n/10%10; //求十位
k=n%10; //求个位
//求i、j、k的立方和
sumi=i*i*i;//求个位立方和
sumj=j*j*j;//求十位立方和
sumk=k*k*k;//求百位立方和
//判断是否为 水仙花数
if(n==sumi+sumj+sumk){
printf("%-5d",n);//输出 水仙花数
}
}
printf("\n");//换行
return 0;
}