Ⅰ 設計一個演算法,判斷一個正的n(n>2)位數是不是迴文數,用自然語言描述演算法步驟。
設這個數為a,b=log10(n)取整可表示其位數。
先通過演算法確定每一位的數字,a1=a/(10^b)取整,a2=(a-a1*10^b)/10^(b-1)。。。。,依次得到各個位數。
然後從第一和最後開始比較,各位數是否相等,如首位數和末位數是否相同。
若都相同才是迴文數,否則就不是。
Ⅱ [演算法筆記]求最大迴文數
小碼哥在數學王國是個對迴文數著迷的孩子。他計劃在數字商店購買一個最大的迴文數,每個數的價格等同於該數的值。小碼哥手上有n塊錢,他想知道能買到的最大迴文數是多少。
輸入格式:一個正整數n,表示小碼哥的零花錢,其中包含前導零。
輸出格式:輸出一個正整數,表示小碼哥能買到的最大迴文數。
輸入示例:648
輸出示例:646
備註:數字長度不超過200。
解題思路:去除前導零後,從前到後遍歷迴文數的一半部分。若當前字元小於等於其對稱位置的字元,直接更新對稱位置的字元;反之,需要向前借位。若遇到前一位為0,則將其設為9,繼續借位,直到遇到非零數字。若借到首位且原來為1,現為0,則說明數字為1後跟若干個0,直接輸出除去首位外的9個數。
Ⅲ 迴文數的迴文數演算法
隨意找一個十進制的數,把它倒過來成另一個數,再把這兩個數相加,得一個和數,這是第一步;然後把這個和數倒過來,與原來的和數相加,又得到一個新的和數,這是第二步。照此方法,一步步接續往下算,直到出現一個「迴文數」為n。例如:28+82=110,110+011=121,兩步就得出了一個「迴文數」。如果接著算下去,還會得到更多的「迴文數」。這個過程稱為「196演算法」。
Ⅳ 可以幫我解釋一下這段 C語言 的迴文數的演算法嗎
這段代碼就是把m顛倒過來,然後將這個數與原來的數進行比較,如果相等就說明是迴文數。比如m為1234321,顛倒過來還是1234321,與原來相等,說明1234321是迴文數。其實有快的,將數作為字元串讀入,然後對字元串分別從首尾開始掃描判斷是否相等,這樣比乘除法更高效。代碼如下:
#include <stdio.h>
#include <string.h>
bool isHuiwen(char str[])
{
int i,j;
for (i = 0,j = strlen(str) - 1; i < strlen(str) / 2; i++,j--)
{
if (str[i] != str[j])
return false;
}
return true;
}
int main()
{
int i;
char str[100];
while (scanf ("%s",str))
{
if (isHuiwen(str))
printf ("Yes\n");
else
printf ("No\n");
}
return 0;
}