Python判断回文数(python判断回文数的程序初级)

http://www.itjxue.com  2023-03-31 01:42  来源:未知  点击次数: 

回文数详细资料大全

“回文”是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如“我为人人,人人为我”等。在数学中也有这样一类数字有这样的特征,成为回文数(palindrome number)。

设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。

注意:

1.偶数个的数字也有回文数124421

2.小数没有回文数

基本介绍 中文名 :回文数 外文名 :palindrome number 定义 :正读倒读都一样的整数 基本情况,1千以内的回文数,平方回数,举例说明,研究现状,回文数算法,对回文数的探索过程,编程实现,JAVA源程式,用visual basic6.0,用C语言编程,python源程式,求最长回文数长度的manacher算法(O(n)), 基本情况 1千以内的回文数 在自然数中,最小的回文数是0,其次是1,2,3,4,5,6,7,8,9,11,22,33,44,55,66,77,88,99,101,111,121,131,141,151,161,171,181,191,202,212,222,232,242,252,262,272,282,292,303,313,323,333,343,353,363,373,383,393,404,414,424,434,444,454,464,474,484,494,505,515,525,535,545,555,565,575,585,595,606,616,626,636,646,656,666,676,686,696,707,717,727,737,747,757,767,777,787,797,808,818,828,838,848,858,868,878,888,898,909,919,929,939,949,959,969,979,989,999. 平方回数 定义:一个回文数,它同时还是某一个数的平方,这样的数字叫做 平方回数 。例如:121。 100以上至1000以内的 平方回数 只有3个,分别是:121、484、676。 其中,121是11的平方。 484是22的平方,同时还是121的4倍。 676是26的平方,同时还是169的4倍。 举例说明 任意某一个数通过以下方式相加也可得到 如:29+92=121 还有 194+491=685,586+685=1271,1271+1721=2992 不过很多数还没有发现此类特征(比如196,下面会讲到) 另外个别平方数是回文数 1的平方=1 11的平方=121 111的平方=12321 1111的平方=1234321 …… …… 依次类推 3×51=153 6×21=126 4307×62=267034 9×7×533=33579 上面这些算式,等号左边是两个(或三个)因数相乘,右边是它们的乘积。如果把每个算式中的“×”和“=”去掉,那么,它们都变成回文数,所以,我们不妨把这些算式叫做“回文算式”。还有一些回文算式,等号两边各有两个因数。请看: 12×42=24×21 34×86=68×43 102×402=204×201 1012×4202=2024×2101 不知你是否注意到,如果分别把上面的回文算式等号两边的因数交换位置,得到的仍是一个回文算式,比如:分别把“12×42=24×21”等号两边的因数交换位置,得到算式是: 42×12=21×24 这仍是一个回文算式。 还有更奇妙的回文算式,请看: 12×231=132×21(积是2772) 12×4032=2304×21(积是48384) 这种回文算式,连乘积都是回文数。 四位的回文数有一个特点,就是它决不会是一个质数。设它为abba,那它等于a*1000+b*100+b*10+a,1001a+110b。能被11整除。 六位的也一样,也能被11整除 还有,人们借助电子计算机发现,在完全平方数、完全立方数中的回文数,其比例要比一般自然数中回文数所占的比例大得多。例如11^2=121,22^2=484,7^3=343,11^3=1331,11^4=14641……都是回文数。 研究现状 人们迄今未能找到自然数(除0和1)的五次方,以及更高次幂的回文数。于是数学家们猜想:不存在n^k(n≥2,k≥5;n、k均是自然数)形式的回文数。 在电子计算器的实践中,还发现了一桩趣事:任何一个自然数与它的倒序数相加,所得的和再与和的倒序数相加,……如此反复进行下去,经过有限次步骤后,最后必定能得到一个回文数。 这也仅仅是个猜想,因为有些数并不“驯服”。比如说196这个数,按照上述变换规则重复了数十万次,仍未得到回文数。但是人们既不能肯定运算下去永远得不到回文数,也不知道需要再运算多少步才能最终得到回文数。 回文数算法 随意找一个十进制的数,把它倒过来成另一个数,再把这两个数相加,得一个和数,这是第一步;然后把这个和数倒过来,与原来的和数相加,又得到一个新的和数,这是第二步。照此方法,一步步接续往下算,直到出现一个“回文数”为n。例如:28+82=110,110+011=121,两步就得出了一个“回文数”。如果接着算下去,还会得到更多的“回文数”。这个过程称为“196算法”。 对回文数的探索过程 上而提到的196这个数,是第一个可能的“利克瑞尔数”,因而它受到了最多的关注。由于目前还不可能证明一个数永远不能形成“回文数”,所以“196和其他那些(看起来)不能形成回文数的数是利克瑞尔数”这一命题仅是猜想而非已获证明。能证明的仅是那些反例,即如果一个数最终能形成“回文数”,则它不是“利克瑞尔数”。 在电子计算机尚未问世的1938年,美国数学家莱默(D. Lehmer,1905-1991)计算到了第73步,得到了一个没有形成“回文数”的35位的和数。至今挑战此题的数学爱好者从没有间断过,并随着计算机科技的发展,不断有发烧友编写不同的程式对此题发起挑战。据笔者最新调查,领军人W.V.Landingham到2006年2月已经计算到了699万步,得到了一个2.89亿位以上的和数,之间的结果仍未出现“回文数”。 另外介绍一个关于达到“回文数”需要计算步数的世界记录。它是一个19位数字1,186,060,307,891,929,990,算出“回文数,,需要了261步。它是由Jason Doucette的算法及程式于2005年11月30日发现的。下表列举的是各位数字中,到达“回文数”花费步数最多的代表性数字。 编程实现 JAVA源程式 publilassPlalindrome{publicstaticvoidmain(String[]args){System.out.println("11is"+(isPlalindrome(11)?"":"not")+"Plalindromenumber");System.out.println("123is"+(isPlalindrome(123)?"":"not")+"Plalindromenumber");System.out.println("17251is"+(isPlalindrome(17251)?"":"not")+"Plalindromenumber");System.out.println("2882is"+(isPlalindrome(2882)?"":"not")+"Plalindromenumber");}publicstaticbooleanisPlalindrome(intnumber){此方法实现判断数字是不是回文数Stringnum=String.valueOf(number);returnnewStringBuffer(num).reverse().toString().equalsIgnoreCase(num);}} --------------- 11 is Plalindrome number 123 is not Plalindrome number 17251 is not Plalindrome number 2882 is Plalindrome number 用visual basic6.0 for i = 100 to 99999 '这里从100开始 后面可以随便填,我这里填99999 表示所有3位数到五位数之间的回文数 if StrReverse(i)=i then print i '用StrReverse函式 判断倒序后的数和原来数是否相同,如果相同者表示此数为回文数 next 用C语言编程 #includestdio.hintx,y;separate(int*data,intn){????inti,j;????y=0;????while(n!=0)????{???????????*(data+y)=n%10;n=n/10;y++;????}????*(data+y)='\0';????for(i=0,j=y-1;i=j;i++,j--)????{????????if(*(data+i)!=*(data+j)){????????printf("%d不是回文!!!\n",x);break;????????}????}????if(i?==y-1)?printf("是回文数");}voidmain(){inta[99];printf("请输入一个正整数:");scanf("%d",x);separate(a,x);} 另外一种实现方法(c++)更简便 #includeiostream using namespace std; bool symm(long m) { long temp = m,n=0; while (temp) { n = n*10+temp%10; temp = temp/10; } return (m == n); } int main(int argc, _TCHAR* argv[]) { long m; cout"请输入一个整数:"; cinm; cout"输入了"symm(m)"个回文数!"; return 0; } python源程式 #coding:--utf-8-- #-*-coding:cp936-*-classHws: def__init__(self): self.result=[] defhWs(self): forainrange(1,10000): b=str(a) foriinrange(0,len(b)/2+1): ifb[i]==b[len(b)-i-1]: self.result.append(a) printself.result hws=Hws() hws.hWs() 求最长回文数长度的manacher算法(O(n)) #includeiostream#includecstdio#includecstdlib#includecstring#includestring#includequeue#includealgorithm#includemap#includeiomanip#defineINF99999999usingnamespacestd;constintMAX=110000+10;chars[MAX*2];intp[MAX*2];intmain(){????while(scanf("%s",s)!=EOF){????????intlen=strlen(s),id=0,maxlen=0;????????for(inti=len;i=0;--i){插入'#'????????????s[i+i+2]=s[i];????????????s[i+i+1]='#';????????}插入了len+1个'#',最终的s长度是1~len+len+1即2*len+1,首尾s[0]和s[2*len+2]要插入不同的字元????????s[0]='*';s[0]='*',s[len+len+2]='\0',防止在while时p[i]越界????????for(inti=2;i2*len+1;++i){????????????if(p[id]+idi)p[i]=min(p[2*id-i],p[id]+id-i);????????????elsep[i]=1;????????????while(s[i-p[i]]==s[i+p[i]])++p[i];????????????if(id+p[id]i+p[i])id=i;????????????if(maxlenp[i])maxlen=p[i];????????}????????coutmaxlen-1endl;????}????return0;}

python编程,回文数判断?

直接用字符串的反转比较就可以了。不管是输入的几位正整数。

python中提供的数据类型转换函数有哪些,作用是什么?

作用就是把合理的数据转换为需要的类型。int()整数,float()浮点数,str()字符串,list()列表,tuple()元组,set()集合……

比如a='12'这个是字符串类型,用int函数a=int(a)这时变量a就是整型,字符串'12'变为了整数12。Python没有变量声明的要求,变量的属性在赋值时确定,这样变量的类型就很灵活。

有一种题目判断一个整数是否回文数,用字符串来处理就很简单

a=1234321#整数

if str(a)==str(a)[::-1]:#借助字符串反转比较就可以确定是否回文数。

还比如元组b=(1,3,2,4),元组是不可以更新删除排序成员的,但是列表是可以的,通过列表函数进行转换来实现元组的更新删除和排序。

b=(1,3,2,4)

b=list(b)

b.sort()

b=tuple(b)

这时得到的元组b就是一个升序的元组(1,2,3,4)

再比如你要输入创建整数列表或者整数元组基本上写法相同,就是用对应的函数来最后处理。

ls=list(map(int,input().split()))#这个就是列表

tup=tuple(map(int,input().split()))#这个就是元组

再比如有个叫集合的,集合有唯一性,可以方便用来去重。

ls=[1,2,3,1,2,3,1,2,3]

ls=list(set(ls))#通过set()去重后,现在的ls里就是[1,2,3]去重后的列表。

python判断一个数是不是回文数

dig = 1234567654321

x = str(dig)

flg = True

for i in range(int(len(x) / 2)): # int()避免长度值除2后得出小数

if x[i] != x[-i - 1]:

flg = False

break

else:

flg = True

if flg:

print("%d 是一个回文数!" % dig)

else:

print("%d 不是一个回文数!" % dig)

#####################################

复用列表的倒序输出,可实现最简便的判断功能。

a = 1234567654321

b=str(a)[::-1] #

if str(a)==b:#判断是否相等

print(str(a) + '是回文数')

else:

print(str(a) + '不是回文数')

如何用python找出10000以内的全部回文数

for i in range(10000):

s = str(i)

f = True

for j in range(len(s)//2):

if s[j] != s[-1-j]:

f = False

break

if f:

print (i)

python 编写函数,判断输入的数字是否为回文数

这个有好几种方式实现,最简单的首先数字转换成字符串x=12321

y=str(x),然后使用list[start:end:span]这种句式将字符串转换成list并倒序输出y[::-1],其中span小于0时倒序,大于0时正序,-1按顺序倒序输出,-2隔一个倒序输出。

具体如下

x

=

input("请输入任意数字")

if

x

==

x[::-1]:

print("回文数")

else:

print("不是回文数")

(责任编辑:IT教学网)

更多

推荐其它系统文章