26.利用递归函数调用方式,将所输入的 5 个字符,以相反顺序打印出来
27.给定一个不多于 5 位的正整数,要求: 1. 求它是几位数,2. 逆序打印出各位数字
28.一个 5 位数,判断它是不是回文数。
29.求不超过 n 位数,且由 0-7 所能组成的奇数个数。
30.一个偶数总能表示为两个素数之和,即把一个偶数分解成两个素数。
26.递归的使用 分析:之前提到过递归在与定义func,并在func中使用func,和递归的结束条件。相当于一个栈。先进后出。调用func,并传入参数5,只要n>1,那么就进行输入读取,并func(4),直到n=1时,进行返回,并输出。 所以大体为如下:
func(n){
定义字符串
if(n<=1){
输入最后一次
输出最后一次
}
else{
输入第1次
递归调用n-2
输出第1次 //先调用到最后一步,然后输出
}
}
27.递归的深度即使用 分析:之前提到过递归在与定义func,并在func中使用func,和递归的结束条件。它是几位数,即递归的深度可以定义全局变量,在每次递归时进行计数。逆序打印,可参考26。本题采用==直接除==计算深度。逆序打印数字则采用%。
28.判断是不是回文数 分析:如 12321 是回文数,个位与万位相同,十位与千位相同。即:找到个位和万位,十位与千位进行比较。直接采用/和%进行计算即可。
29.由 0-7 所能组成的奇数个数 找规律: 1.最后一位为奇数1357 ,4种 2.如果n为2位数,则74 7是因为首数字不能为0 3.如果n为3位数,则78*4
30.偶数分解成两个素数 难点:判断一个数是否是素数 写一个函数Isprimer,则可以Isprimer(n) && (x-n)来进行偶数分解成两个素数 判断一个数是否是素数 写一个for循环,到sqrt(n),即平方根,如果n%i存在=0的情况则直接返回0,如果没有,则返回1。
#include <stdio.h>
void func(int n){
char next;
if(n<=1){
next =getchar();
printf("输出相反结果为:");
putchar(next);
}
else{
next=getchar();
func(n-1);
putchar(next);
}
}
// 判断一个数是否是素数
int Isprimer(int n){
for(int i=2;i<=sqrt(n);i++){
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
// 26.利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来
int i=5;
printf("输入递5个以内字符:");
func(i);
// 27.给定一个不多于5位的正整数,要求:1.求它是几位数,2.逆序打印出各位数字
int n,sum=0,temp;
printf("输入不多于5位的正整数:");
scanf("%d",&n);
temp=n;
for(int i=0;i<5;i++){
if(n!=0){
sum++;
n /= 10;
}
}
printf("它是%d位数\n",sum);
printf("逆序打印数字:");
while (temp != 0) {
printf("%d ", temp % 10); // 打印最后一位数字
temp /= 10; // 去掉最后一位数字
}
printf("\n");
// 28.一个5位数,判断它是不是回文数。
// 如 12321 是回文数,个位与万位相同,十位与千位相同
int a,b,c,d,e,f,x;
printf("输入5位的正整数:");
scanf("%d",&x);
a=x/10000;
b=x%10000/10;
c=x%10000/100;
d=x%10000/10;
e=x%10;
if(e==a && b==d){
printf("这个数是回文数");
}
else{
printf("这个数不是回文数");
}
// 29.求不超过n位数,且由 0-7 所能组成的奇数个数。
// 思路:
// 1.最后一位为奇数1357 ,4种
// 2.如果2位数,则7*4 7是因为首数字不能为0
// 3.如果3位数,则7*8*4
printf("输求不超过n(n>=2)位数,且由 0-7 所能组成的奇数个数。\n");
long s=4,sum=0,n;
printf("输入n位数的n:");
scanf("%d",&n);
for(int i=2;i<=n;i++){
if(i==2){
s *= 7;
}
else{
s *= 8;
}
sum += s;
}
printf("不超过8位数,且由 0-7 所能组成的奇数个数为%ld个。",sum);
// 30.一个偶数总能表示为两个素数之和,即把一个偶数分解成两个素数。
// 解析:重点在于要学会函数:判断一个数是否是素数
int n,i;
do{
printf("输入偶数:");
scanf("%d",&n);
}while(n%2!=0);
for(i=1;i<n;i++){
if(Isprimer(i)&&Isprimer(n-i)){
break;
}
}
printf("输入偶数%d解成两个素数%d和%d。",n,i,n-i);
return 0;
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。