對於乙個數,要判定它是否是回文數,直觀的做法是先判定其最高位(首位)與最低位(最後一位)是否相同,如果不同則不是回文數;如果相同則其掉其做高位和最低位,對剩餘的位繼續進行判定;如果剩餘的位只有一位或零位(即整個數是偶數字)則為回文數。
本程式就是基於這樣的基本思想進行計算的。
本程式通用性強,可以計算1到任意指定數之間的所有回文數。
計算回文數還可以用數字字元組合的方法來實現,演算法上採用回溯法。
程式如下:
/* 列印輸出1到輸入數之間的回文數 */
#include int ispalindrome(long, long);
int main(void)
printf("\n");
return 0;
}// 判斷n是否為回文數的函式
// 引數n為需要判斷是否為回文數的數
// 引數bigmod,若n為m位數,其值為10^m-1(10的m-1次方)
// 引數bigmod必須事先正確設定
int ispalindrome(long n, long bigmod)
// 如果只剩下1位或2位結束
if(bigmod <= 10)
break;
// 去掉最高位和最低位
n %= bigmod;
n /= 10;
bigmod /= 100;
}return flag;
}
關鍵**:
// 判斷n是否為回文數的函式
// 引數n為需要判斷是否為回文數的數
// 引數bigmod,若n為m位數,其值為10^m-1(10的m-1次方)
// 引數bigmod必須事先正確設定
int ispalindrome(long n, long bigmod)
// 如果只剩下1位或2位結束
if(bigmod <= 10)
break;
// 去掉最高位和最低位
n %= bigmod;
n /= 10;
bigmod /= 100;
}return flag;
}
輸入20000時,程式執行結果如下:
12 列印 1 到最大的 n 位數
題目 輸入數字 n,按順序列印出從 1 到 最大的 n 位十進位制數。比如輸入 3 則列印出 1 2 3 一直到最大的3位數即 999。解析 容易知道不能用 int 等數字型別表示 大數問題 關鍵點 1.如何用字串表示n位數?2.如何實現字串數的自增操作?3.如何列印乙個字串數?申請長度是n 1的字...
12 列印1到最大的n位數
輸入數字n,按順序列印出從1到最大的n位十進位制數。比如輸入3,列印出1,2,3一直到最大的3位數即999.n的取值範圍可以很大,考慮大數問題。最常見的方法是用字串或者數字表達大數。把問題轉換成數字排列問題。思考 如何用字串儲存數字 如何在字串表達的數字上模擬加法 把字串表達是數字列印出來 incl...
17 列印從1到最大的n位數
輸入數字n,按順序列印出從1到最大的n位十進位制數。比如輸入3,則列印出1 2 3一直到最大的3位數999。示例 1 輸入 n 1 輸出 1,2,3,4,5,6,7,8,9 說明 題目要求列印 從1至最大的n位數的列表 因此需考慮以下兩個問題 最大的n位數 記為end 和位數n的關係 例如最大的1位...