第k回文数
2012-04-08 22:36
183 查看
问题:
给一个数k,给出第k个回文数
分析:
一位数9个,二位数9个;
三位数90个,四位数90个;
五位数900个,六位数900个;
。。。。。
给出代码:
给一个数k,给出第k个回文数
分析:
一位数9个,二位数9个;
三位数90个,四位数90个;
五位数900个,六位数900个;
。。。。。
给出代码:
#include <stdio.h> void calPalin(int iNum); int main() { int iNum; while (scanf("%d",&iNum)!=EOF) { if (iNum<=0) { printf("Error Input!\n\n"); } else { calPalin(iNum); } } return 0; } void calPalin(int iNum) { int iHalfLen,iHalf,iDegree,iDigit,iResult; //iHalfLen是回文数对称左边有几位,如12521左边是3位数 //iHalf是回文数对称的左边一半,如12521中的125;iDegree表示几位数; //iDigit表示某一几位数有多少回文数,如3位数有90个; iResult是结果 int i; iDigit=9; //赋初值为9 for (iDegree=1;;iDegree++) { if (iNum-iDigit<=0) //该处=0时一定要退出!! { break; } iNum-=iDigit; if (iDegree%2==0) //一位数和二位数中的回文数是一样多,三位数和四位数中也一样。。。 { iDigit*=10; } } iHalfLen=(iDegree+1)/2; //算某一回文数左边的位数,如12521左边有3位 iHalf=1; //我觉得精华之所在 for (i=2;i<=iHalfLen;i++) { iHalf*=10; } iHalf+=iNum-1; iResult=iHalf; if (iDegree&1) //如果是奇位数,那么右边比左边一半少一位 { iHalf/=10; } while (iHalf) //求最终结果 { iResult=iResult*10+iHalf%10; iHalf/=10; } printf("The result is : %d\n\n",iResult); }
相关文章推荐
- NOJ 1046 第K回文数 水题
- noj 1046 第K回文数
- 1046-第K回文数
- NOJ1046第K回文数——???
- hdoj 1431 素数回文【素数筛法+回文数判断打表】
- 求最长回文子串,O(n)复杂度
- 数组中求第K大数
- 无序整数数组中找第k大的数
- 树状数组求第K小值 (spoj227 Ordering the Soldiers && hdu2852 KiKi's K-Number)
- 求回文数
- HDU 3068:最长回文【回文字符串】
- 回文 用递归实现 java
- leetcode(5)—— Longest Palindromic Substring(最长回文子串)
- 判断一个字符串是否为回文的递归算法
- 找第k大的数
- 用C++实现对回文的判断
- 最长回文子串(Manacher算法)
- 在两个有序链表中查找第K大元素。
- nyoj 37 回文字符串
- 用递归实现回文判断