一道函数题
这是题目水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=1^3+5^3+3^3;
本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。
函数接口定义:
int narcissistic( int number );
void PrintN( int m, int n );
函数narcissistic判断number是否为水仙花数,是则返回1,否则返回0。
函数PrintN则打印开区间(m, n)内所有的水仙花数,每个数字占一行。题目保证100≤m≤n≤10000。
然后这是我的代码 //疑惑点1,为什么放在中间,调用函数 PrintN(m, n); 的时候。疑惑点2 是为什么我这个运行之后会发生段错误,难道数组不可以这样用嘛?求助。救救孩子吧
#include <stdio.h>
int narcissistic( int number );
void PrintN( int m, int n );
int main()
{
int m, n;
scanf("%d %d", &m, &n);
if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
PrintN(m, n);//为什么放在中间
if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);
return 0;
}
#include<math.h>
int narcissistic( int number )
{
int count=0,i,flag=0,sum=0;
int a={0};
for(i=0;;i++){
a=number%10;
number=number/10;
count++;
if(number<0)
break;
}
for(i=0;i<count;i++)
{
sum=sum+pow(a,count);
if(sum==number)
{
flag=1;
}
}
return flag;
}
void PrintN( int m, int n )
{
while(m<n){
if(narcissistic(m))
printf("%d\n",m);
}
} 本帖最后由 bin554385863 于 2019-11-5 12:20 编辑
之前代码不准确,下班重写
for(i=0;;i++){
a[\i] =number%10;
number=number/10;
count++;
if(number<0)
break;
}
改成下面试试
for(int k=0;number != 0;k++)
{
a = number % 10;
number /= 10;
count = k;
} 本帖最后由 jackz007 于 2019-11-5 10:44 编辑
#include <stdio.h>
int narcissistic(int number)
{
int d , e , k , ret = 0 ;
if(number > 0) {
for(d = number , e = 0 ; d ; k = d % 10 , e += k * k * k , d /= 10) ;
if(number == e) ret = 1 ;
}
return ret ;
}
void PrintN(int m , int n)
{
int k ;
if(m > 0 && n > 0 && m + 1 < n) for(k = m + 1 ; k < n ; k ++) if(narcissistic(k)) printf("%d\n" , k) ;
}
int main()
{
int m , n ;
scanf("%d%d" , & m , & n) ;
if(narcissistic(m)) printf("%d is a narcissistic number\n" , m) ;
PrintN(m , n) ;
if(narcissistic(n)) printf("%d is a narcissistic number\n" , n) ;
}
C:\Bin>g++ -o x x.c
C:\Bin>x
99 1000
153
370
371
407
C:\Bin> bin554385863 发表于 2019-11-5 03:08
之前代码不准确,下班重写
for(i=0;;i++){
a[\i] =number%10;
为什么要用a,其实我用a发生了段错误 找不出原因 jackz007 发表于 2019-11-5 10:38
炒鸡谢谢!虽然我不是要代码 主要是我想解决我的疑惑的地方, 本帖最后由 bin554385863 于 2019-11-6 11:10 编辑
#include <stdio.h>
#include <math.h>
int digitnum(int dig)
{
int count = 0, num = abs(dig);
while (num != 0 )
{
num /= 10;
count++;
}
return count;
}
int narcissistic(int number)
{
int tmp = number, sum = 0, s = digitnum(tmp);
switch ((number > 0)&&(number < __INT32_MAX__) ? 1 : 0)
{
case 0:
printf("DATE ERROR\n");
break;
case 1:
while (number)
{
int t = number % 10;
number /= 10;
sum += pow(t, s);
}
break;
}
return (sum == tmp ? 1 : 0);
}
void PrintN(int min, int max)
{
switch ((min < max ? min : max) > 0 ? 1 : 0)
{
case 0:
printf("DATE ERROR\n");
break;
case 1:
for (size_t i = min; i <= max; i++)
{
switch (narcissistic(i))
{
case 0:
continue;
break;
case 1:
printf("%d\n", i);
break;
}
}
}
}
int main(int argc, char const *argv[])
{
int a = 0, b = 0;
printf("请输入下限(>0),上限\n");
scanf("%d%d", &a, &b);
printf("百合花数为\n");
PrintN(a, b);
return 0;
}
------------------------------------------------------------------------------------------
Microsoft Windows [版本 10.0.18363.418]
(c) 2019 Microsoft Corporation。保留所有权利。
E:\Users\admin\Documents\VScode>c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-iv25msor.r0z --stdout=Microsoft-MIEngine-Out-0bprluxx.njt --stderr=Microsoft-MIEngine-Error-hwhabnkr.3ux --pid=Microsoft-MIEngine-Pid-lwvxsvc4.l2p --dbgExe=D:\MinGW\bin\gdb.exe --interpreter=mi
请输入下限(>0),上限
100 90000
百合花数为
153
370
371
407
1634
8208
9474
54748
E:\Users\admin\Documents\VScode>
fabvy12 发表于 2019-11-5 12:43
炒鸡谢谢!虽然我不是要代码 主要是我想解决我的疑惑的地方,
这个问题 不知道怎么说,你字写一次玖明白了,何况不一定要用数组 bin554385863 发表于 2019-11-5 12:53
这个问题 不知道怎么说,你字写一次玖明白了,何况不一定要用数组
我知道可以不用数组,但是我觉得这样好玩,其实我还写了另一个代码,这个用数组的,运行超时了。我刚刚改成你那样子,好像不行 bin554385863 发表于 2019-11-5 12:53
这个问题 不知道怎么说,你字写一次玖明白了,何况不一定要用数组
你看看我的自定义函数这里,调用幂函数。这里有木有问题
#include<math.h>
int narcissistic( int number )
有木有错误,如果是错的,
我想达到这个 在自定义函数里面调用幂函数,该怎么调用 本帖最后由 bin554385863 于 2019-11-5 22:25 编辑
fabvy12 发表于 2019-11-5 12:59
你看看我的自定义函数这里,调用幂函数。这里有木有问题
#include
int narcissistic( int number )
那个函数的用法没错。
for(i=0;;i++)
{
a[\i]=number%10;
number=number/10;
count++;
if(number<0)//问题可能出在这,number 是不会小于0的,所以这个条件永远不会成立,他只会大于等于0,大于小于0都不合适,所以这里应该是不等于0;
break;
}
}
bin554385863 发表于 2019-11-5 15:41
那个函数的用法没错。
for(i=0;;i++)
{
天呐 谢谢!我一直以为1/10等于负数 fabvy12 发表于 2019-11-5 22:37
天呐 谢谢!我一直以为1/10等于负数
不会
假设有: m > n >0&&m%n != 0则 n / m = 0, n % m= n;
#include <iostream>
#include <array>
int main(int argc, char const *argv[])
{
std::array<int, 10> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
std::array<int, 10> arr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 11};
for (int i : arr)
{
for (int j : arr1)
{
if ((j != i) && (j < i))
{
std::cout << j << "/ " << i << " = " << j / i << " ";
std::cout << j << " % " << i << " = " << j % i << std::endl;
}
}
}
return 0;
}
-----------------------------------------------------------------------
Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。
尝试新的跨平台 PowerShell https://aka.ms/pscore6
PS E:\Users\admin\Documents\VScode> & 'c:\Users\admin\.vscode\extensions\ms-vscode.cpptools-0.26.1\debugAdapters\bin\WindowsDebugLauncher.exe' '--stdin=Microsoft-MIEngine-In-dil1psuq.zyj' '--stdout=Microsoft-MIEngine-Out-4phhfec2.d3q' '--stderr=Microsoft-MIEngine-Error-l3e00pgz.mls' '--pid=Microsoft-MIEngine-Pid-garl0zf3.kjl' '--dbgExe=D:\MinGW\bin\gdb.exe' '--interpreter=mi'
1/ 2 = 0 1 % 2 = 1
1/ 3 = 0 1 % 3 = 1
2/ 3 = 0 2 % 3 = 2
1/ 4 = 0 1 % 4 = 1
2/ 4 = 0 2 % 4 = 2
3/ 4 = 0 3 % 4 = 3
1/ 5 = 0 1 % 5 = 1
2/ 5 = 0 2 % 5 = 2
3/ 5 = 0 3 % 5 = 3
4/ 5 = 0 4 % 5 = 4
1/ 6 = 0 1 % 6 = 1
2/ 6 = 0 2 % 6 = 2
3/ 6 = 0 3 % 6 = 3
4/ 6 = 0 4 % 6 = 4
5/ 6 = 0 5 % 6 = 5
1/ 7 = 0 1 % 7 = 1
2/ 7 = 0 2 % 7 = 2
3/ 7 = 0 3 % 7 = 3
4/ 7 = 0 4 % 7 = 4
5/ 7 = 0 5 % 7 = 5
6/ 7 = 0 6 % 7 = 6
1/ 8 = 0 1 % 8 = 1
2/ 8 = 0 2 % 8 = 2
3/ 8 = 0 3 % 8 = 3
4/ 8 = 0 4 % 8 = 4
5/ 8 = 0 5 % 8 = 5
6/ 8 = 0 6 % 8 = 6
7/ 8 = 0 7 % 8 = 7
1/ 9 = 0 1 % 9 = 1
2/ 9 = 0 2 % 9 = 2
3/ 9 = 0 3 % 9 = 3
4/ 9 = 0 4 % 9 = 4
5/ 9 = 0 5 % 9 = 5
6/ 9 = 0 6 % 9 = 6
7/ 9 = 0 7 % 9 = 7
8/ 9 = 0 8 % 9 = 8
PS E:\Users\admin\Documents\VScode> bin554385863 发表于 2019-11-6 00:21
不会
假设有: m > n >0&&m%n != 0则 n / m = 0, n % m= n;
兄die 牛
页:
[1]