习题5-4 使用函数求素数和 (20 分)
本题要求实现一个判断素数的简单函数、以及利用该函数计算给定区间内素数和的函数。
素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。
函数接口定义:
int prime( int p );
int PrimeSum( int m, int n );
其中函数prime 当用户传入参数p 为素数时返回1,否则返回0;函数PrimeSum 返回区间[m ,?n ]内所有素数的和。题目保证用户传入的参数m ≤n 。
裁判测试程序样例:
#include <stdio.h>
#include <math.h>
int prime( int p );
int PrimeSum( int m, int n );
int main()
{
int m, n, p;
scanf("%d %d", &m, &n);
printf("Sum of ( ");
for( p=m; p<=n; p++ ) {
if( prime(p) != 0 )
printf("%d ", p);
}
printf(") = %d\n", PrimeSum(m, n));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
-1 10
输出样例:
Sum of ( 2 3 5 7 ) = 17
//加不加else if(p == 2)return 1;这句话,结果都显示正确,是因为sqrt(2)=根号2,也就是说给i赋初值2后就因为不满足初始条件而退出循环,返回return1;
int prime( int p )
{
int i;
if(p <= 1)
return 0;
else if(p == 2)
return 1;
for(i = 2; i <= sqrt(p); i++)
{
if(p % i == 0)
return 0;
}
return 1;
}
int PrimeSum( int m, int n )
{
int i, sum = 0;
for(i = m; i <= n; i++)
{
if(prime(i) != 0)
{
sum += i;
}
}
return sum;
}
习题5-6 使用函数输出水仙花数 (20 分)
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。
函数接口定义:
int narcissistic( int number );
void PrintN( int m, int n );
函数narcissistic 判断number 是否为水仙花数,是则返回1,否则返回0。
函数PrintN 则打印开区间(m ,?n )内所有的水仙花数,每个数字占一行。题目保证100≤m ≤n ≤10000。
裁判测试程序样例:
#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;
}
/* 你的代码将被嵌在这里 */
输入样例:
153 400
输出样例:
153 is a narcissistic number
370
371
?//1.不细心,看错了区间,打印出给定区间(m,n)内所有的水仙花数,不包括m和n。2.通过取余数用数组存放number的各位,再用pow函数求值要简单许多
int narcissistic( int number )
{
int sum = 0, remainder, a = 1;
int n1 = number;
int n2 = number;
while(n1 > 0)
{
remainder = n1 % 10;
while(n2 > 0)
{
a *= remainder;
n2 /= 10;
}
n1 /= 10;
sum += a;
a = 1;
n2 = number;
}
if(sum == number)
return 1;
else
return 0;
}
void PrintN( int m, int n )
{
int i;
for(i = m + 1; i < n; i++)
{
if(narcissistic(i) == 1)
printf("%d\n", i);
}
}
|