Ⅰ 设计一个算法,判断一个正的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;
}