在练习指针函数时写了2个指针函数,一个算出水仙数,一个输出计算水仙数的式子,再在main函数中一起调用,但是编译后只能求出一个水仙数
代码:
#include
int * shuxianshu(int * p);
void output(const int * input, int num);
int main (int argc, char *argv[])
{
int r[10] = {0};
output(shuxianshu(r), (sizeof(r) / sizeof(int)));
return 0;
}
int * shuxianshu(int * p){
int a, b, c;
int i, j = 0;
for(i = 100; i <= 999; i++)
{
a = i / 100;
b = (i - 100) / 10;
c = i - a*100 - b*10;
if(a*a*a+b*b*b+c*c*c == i)
{*(p + j) = i;
printf("%d\n",i);
j++;
}
}
return p;
}
void output(const int * input, int num)
{
int a, b, c, i;
for(i = 0; i < num; i++)
{
a = * (input + i) % 10;
b = (* (input + i) / 10) % 10;
c = (* (input + i) / 100) % 10;
printf("%d^3+%d^3+%d^3 = %d\n", a, b, c, * (input + i));
}
}
编程思路是:创建数组r,将其指针传给shuixianshu函数,shuixianshu函数会求出所有水仙数并逐个放入数组r中,最后再把数组r和数组r的元素个数传给output函数,最后输出。
运行结果:
linux@ubuntu:~/ctype/shuixianshu$ ./a.out
153
3^3+5^3+1^3 = 153
0^3+0^3+0^3 = 0
0^3+0^3+0^3 = 0
0^3+0^3+0^3 = 0
0^3+0^3+0^3 = 0
0^3+0^3+0^3 = 0
0^3+0^3+0^3 = 0
0^3+0^3+0^3 = 0
0^3+0^3+0^3 = 0
0^3+0^3+0^3 = 0
如结果所示,只能求出第一个水仙数153,不知道为什么后续的水仙数求不出来
而且在最开始的设置容纳水仙数的数组赋值时,因为不清楚水仙数的个数所以不能确定数组的元素个数(所以赋值了较大的数),最后输出就会输出多余的0(数组是int,也不能用\0来判断有效的元素个数),这个问题又应该如何解决?