C語言求回文數(shù)
問題描述
打印所有不超過n(取n<256)的其平方具有對稱性質(zhì)的數(shù)(也稱回文數(shù))。
問題分析
對于要判定的數(shù)n計(jì)算出其平方后(存于a),按照“回文數(shù)”的定義要將最高位與最低位、次高位與次低位……進(jìn)行比較,若彼此相等則為回文數(shù)。此算法需要知道平方數(shù)的位數(shù),再一一將每一位分解、比較,此方法對于位數(shù)已知且位數(shù)不是太多的數(shù)來說比較適用。
此問題可借助數(shù)組來解決。將平方后的(a的)每一位進(jìn)行分解,按從低位到高位的順序依次暫存到數(shù)組中,再將數(shù)組中的元素按照下標(biāo)從大到小的順序重新將其組合成一個(gè)數(shù)眾(如n=15,則a=225且k=522),若k等于n×n則可判定n為回文數(shù)。
算法設(shè)計(jì)
從低位到高位將某一整數(shù)拆分。對于一個(gè)整數(shù)(設(shè)變量名為a)無論其位數(shù)多少,若欲將最低位拆分,只需對10進(jìn)行求模運(yùn)算a%10,拆分次低位首先要想辦法將原來的次低位作為最低位來處理,用原數(shù)對10求商可得到由除最低位之外的數(shù)形成的新數(shù),且新數(shù)的最低位是原數(shù)的次低位,根據(jù)拆分最低位的方法將次低位求出a/10、a%10,對于其他位上的數(shù)算法相同。
利用這個(gè)方法要解決的一個(gè)問題就是,什么情況下才算把所有數(shù)都拆分完?當(dāng)拆分到只剩原數(shù)最高位時(shí)(即新數(shù)為個(gè)位數(shù)時(shí)),再對10求商的話,得到的結(jié)果肯定為0,可以通過這個(gè)條件判斷是否拆分完畢。根據(jù)題意,應(yīng)將每次拆分出來的數(shù)據(jù)存儲到數(shù)組中,原數(shù)的最低位存到下標(biāo)為0的位置,次低位存到下標(biāo)為1的位置……依次類推。
程序段如下:
for (i=0; a!=0; i++)
{
m[i] = a % 10;
a /= 10;
}
將數(shù)組中元素重新組合成一新數(shù)。拆分時(shí)變量a的最高位仍然存儲在數(shù)組中下標(biāo)最大的位置,根據(jù)“回文數(shù)”定義,新數(shù)中數(shù)據(jù)的順序與a中數(shù)據(jù)的順序相反,所以我們按照下標(biāo)從大到小的順序分別取出數(shù)組中的元素組成新數(shù)k,由幾個(gè)數(shù)字組成一個(gè)新數(shù)時(shí)只需用每一個(gè)數(shù)字乘以所在位置對應(yīng)的權(quán)值然后相加即可,在編程過程中應(yīng)該有一個(gè)變量t來存儲每一位對應(yīng)的權(quán)值,個(gè)位權(quán)值為1,十位權(quán)值為10,百位權(quán)值為100……,所以可以利用循環(huán),每循環(huán)一次t的值就擴(kuò)大10倍。對應(yīng)程序段如下:
for( ; i>0; i--)
{
k += m[i-l] * t;
t *= 10;
}
下面是完整的代碼:
#include<stdio.h>
int main()
{
int m[16], n, i, t, count=0;
long unsigned a, k;
printf("No. number it's square(palindrome)\n");
for( n=1; n<256; n++ ) /*窮舉n的取值范圍*/
{
k=0; t=1; a=n*n; /*計(jì)算n的平方*/
for( i=0; a!=0; i++ ) /*從低到高分解數(shù)a的每一位存于數(shù)組m[1]~m[16]*/
{
m[i] = a % 10;
a /= 10;
}
for(; i>0; i--)
{
k += m[i-1] * t; /*t記錄某一位置對應(yīng)的權(quán)值 */
t *= 10;
}
if(k == n*n)
printf("%2d%10d%10d\n", ++count, n, n*n);
}
return 0;
}
</stdio.h>
運(yùn)行結(jié)果:
No. number it's square(palindrome)
1 1 1
2 2 4
3 3 9
4 11 121
5 22 484
6 26 676
7 101 10201
8 111 12321
9 121 14641
10 202 40804
11 212 44944
作者:大學(xué)生新聞網(wǎng) 來源:大學(xué)生新聞網(wǎng)
發(fā)布時(shí)間:2025-03-11 閱讀:
- C語言求勾股數(shù)
- 所謂勾股數(shù),是指能夠構(gòu)成直角三角形三條邊的三個(gè)正整數(shù)(a,b,c)。
- 03-11 關(guān)注:0
- C語言求回文數(shù)
- 將數(shù)組中元素重新組合成一新數(shù)。拆分時(shí)變量a的最高位仍然存儲在數(shù)組中下標(biāo)最大的位置
- 03-11 關(guān)注:0
- C語言水仙花數(shù)
- 輸出所有的“水仙花數(shù)”,所謂的“水仙花數(shù)”是指一個(gè)三位數(shù)其各位數(shù)字的立方和等于該數(shù)本身,例如153是“水仙花數(shù)”,因?yàn)椋?53 = 13
- 03-11 關(guān)注:0
- C語言求自守?cái)?shù)
- 自守?cái)?shù)是指一個(gè)數(shù)的平方的尾數(shù)等于該數(shù)自身的自然數(shù)。
- 03-11 關(guān)注:0
- C語言求親密數(shù)
- 如果整數(shù)A的全部因子(包括1,不包括A本身)之和等于B;且整數(shù)B的全部因子(包括1,不包括B本身)之和等于A
- 03-11 關(guān)注:0
- C語言求完數(shù)(完全數(shù))
- 如果一個(gè)數(shù)等于它的因子之和,則稱該數(shù)為“完數(shù)”(或“完全數(shù)”)。例如,6的因子為1、2、3,而 6=1+2+3,因此6是“完數(shù)”。
- 03-11 關(guān)注:1
- C語言百錢買百雞問題(詳解版)
- 我國古代數(shù)學(xué)家張丘建在《算經(jīng)》一書中曾提出過著名的“百錢買百雞”問題
- 03-11 關(guān)注:1
- C語言輸出菱形(詳解版)
- 菱形,就是如下所示的圖形,總行數(shù)與總列數(shù)相等
- 03-11 關(guān)注:1