题目描述
* 请问:n位的回文数有多少个?请编写一个递归函数来解决此问题!!!
输入:
3
输出:
90
输入:
5
输出:
900
**输入:
10
输出:
90000**
输入:
8
输出:
9000
输入:
1
输出:
10
思路分析
通过for循环读入这个数,通过/和%操作将这个数据逆转,然后再对比逆转后的数字是否和原数字相等
通过for循环读入这个数,每次取头位一个数字和末位一个数字,依次比较这两个数字是否相等,再去掉这两个数字,直到剩下一个数字(位数为奇数)或者剩下两个数字(位数为偶数)
通过数学关系,直接判断位数,算出这个位数内的回文数个数;
代码描述
1. 第一种思路:
#include <stdio.h> #include <math.h> int reverse(long int i,long int *terminate) //递归函数求数值的逆序 { if (i<=0){ //递归出口 return 1; } else{ *terminate*=10; //每次乘10升位数 *terminate+=i%10; //加上个位 reverse(i/10,terminate); //递归每次规模缩小 } return 1; } int main () { int n; scanf ("%d",&n); //读入一个n,表示n位整数 long int i; int count=0; if (n==1){ //如果等于1,则有10个(0-9都是),特殊处理; printf ("10"); return 0; } for (i=pow(10,n-1);i<pow(10,n);i++){ //从第一个n位数开始(10^(n-1)),到(10^n)-1 long int terminate=0; //定义一个逆序目标数 reverse(i,&terminate); //把i和逆序目标数传入 if (terminate==i){ //逆序后还和原数相等,则可计数 count++; } } printf ("%d",count); //输出个数 return 0; }
2. 第二种思路:
#include <stdio.h> #include <math.h> int judge(int i,int n) { int first,last; if (n<=1){ //规模减小,直到n为1(偶数)或者0 return 1; } else{ first=i/pow(10,n-1); //头位数字 last=i%10; //末位数字 if (first!=last){ //头位末尾不一样直接退出 return 0; } int tem=pow(10,n-1); judge(i%tem/10,n-2); //剔除头尾剩下中间,位数减二 } } int main () { int n; scanf("%d",&n); if (1==n){ printf ("10"); return 0; } int i; int count=0; long long low=pow(10,n-1); //循环入口 long long high=pow(10,n); //循环出口 for (i=low;i<high;i++){ if ( judge(i,n)==1){ //判断i是否为回文,计数 count++; } } printf ("%d",count); return 0; }
3. 第三种思路:
#include <stdio.h> #include <math.h> int main (){ int n; scanf ("%d",&n); int ji=9*pow(10,n/2),ou=9*pow(10,n/2-1); if (n==1){ printf ("10"); } else if (n==2){ printf ("%d",9); } else if (n%2==1){ printf ("%d",ji); } else if (n%2==0){ printf("%d",ou); } return 0; }
额外疑问
第一第二种方法当n=10的时候运算不出来,求解为何如此,是时间复杂度太高了吗?还是爆int了或者爆递归了?
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
算法(Rust语言描述) 这是一本开源的算法书,在遵守许可协议的前提下您可以自由的使用、翻译、印刷、出版本书。在遵守许可协议的前提下您也可以将这本书商业化。 如果您想加入本书的编撰,您可以联系本书的发起者yevgenyliu@yahoo.com
本文向大家介绍Python语言描述机器学习之Logistic回归算法,包括了Python语言描述机器学习之Logistic回归算法的使用技巧和注意事项,需要的朋友参考一下 本文介绍机器学习中的Logistic回归算法,我们使用这个算法来给数据进行分类。Logistic回归算法同样是需要通过样本空间学习的监督学习算法,并且适用于数值型和标称型数据,例如,我们需要根据输入数据的特征值(数值型)的大小来
本文向大家介绍Python语言描述KNN算法与Kd树,包括了Python语言描述KNN算法与Kd树的使用技巧和注意事项,需要的朋友参考一下 最近邻法和k-近邻法 下面图片中只有三种豆,有三个豆是未知的种类,如何判定他们的种类? 提供一种思路,即:未知的豆离哪种豆最近就认为未知豆和该豆是同一种类。由此,我们引出最近邻算法的定义:为了判定未知样本的类别,以全部训练样本作为代表点,计算未知样本与所有训练
本文向大家介绍C++,Java,JavaScript这三种语言的区别相关面试题,主要包含被问及C++,Java,JavaScript这三种语言的区别时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 从静态类型还是动态类型来看 静态类型,编译的时候就能够知道每个变量的类型,编程的时候也需要给定类型,如Java中的整型int,浮点型float等。C、C++、Java都属于静态类型语言。 动态类型
本文向大家介绍通过“回文字算法”复习C++语言,包括了通过“回文字算法”复习C++语言的使用技巧和注意事项,需要的朋友参考一下 一、什么是回文字 给定一个字符串,从前往后读和从后往前读,字符串序列不变。例如,河北省农村信用社的客服电话是“96369”,无论从后往前读,还是从前后往后读,各个字符出现的位置不变。 二、功能实现 (一)、给定一个字符串,判断该字符串是否是回文字。 (二)、给定一个任意
14.Android接口描述语言 Android中的每个应用程序都运行于独立的进程中。出于安全考虑,程序不可以直接访问另一个程序中的内容。但不同程序之间交换数据是允许的,为此Android提供了一系列的通信机制。其中之一是前面我们提到的Intent,它是一种异步的机制,在发送时不必等待对方响应。 不过有时我们需要更直接一些,同步地访问其它进程中的数据。这类通信机制就叫做进程间通信(Interpro