小菜鸡更新第一篇博客啦(有错希望能够指正且多多包涵哈)!
总结一下"回文数"
1. 数字回文数
就普通举例:‘12321’‘5665’之类的都是回文数(即每个数字正排序和逆排序的结果是一样的);
那怎么实现呢?
首先最容易想到的当然是 将 原数 的 逆序数 表示一遍 再判断两者是否相等。
那么有什么比较容易的算法可以简便地把上述步骤呈现出来呢?
来看一段代码片:
int main()
{
int number;
scanf("%d", &number); //输入原数
int new_number=0;int s=number; //定义一个new_number来装原数的逆排序数
//此处需要定义一个s来代替原本输入的数,不然最后比较新数与原数的时候会出错(即原数经变化不再是原数了)
while(s!=0) //此处的循环条件 即 s/10 到该数的最后一位数 若到了最后一位,s/10的结果必为0
{
new_number=new_number*10+s%10; //一个数除以10的余数就是该数最后一位,每次拿到一个余数,都用来构造新数,新数=新数*10+余数
s/=10; //一个数除以10的商就是排除掉最后一位后的数
}
if(new_number==number) //结果出来了就与原数进行比较,相等即为回文数,不等就不是回文数
printf("是回文数");
else
printf("不是回文数");
}
上述代码的算法思路不太理解的话可以手动演算一遍喔
2. 字符回文数
还是简单举例:‘ABCBA’‘qwerrewq’这样类似的字符就是字符回文数(即倒着写与原字符串一样)。
怎么实现呢?
和数字回文数一样,我们想的是将其逆序排列一遍,看看是否与原字符串一样即可。对于字符串来说,有一个好处:经输入后,每个字符的位置是固定的。我们只需要将第一个和第n个比较,第二个与第n-1个比较…遍历一遍,若前后能相互对应一致,则为回文数,否则不是回文数。
来看代码:
**int main()
{
int i;
char input[100]; //定义一个字符串
int flag=0; //定义一个标志
scanf("%s", input);
int len = strlen(input); //获取输入字符串的长度,利于后面前后字符比较(此函数在 string.h 头文件中)
for(i=0;i<len-1;i++) //遍历字符串
{
if(input[i]!=input[len-1-i]) // 若在遍历过程中,出现了前后对应位置不一样的情况
flag=1; // 则直接给标志flag赋值 1
break; // 因为已经出现了前后不一的情况,则不需要再进行后面的比较,break跳出循环
}
if(flag==1) //根据标志flag的值 输出 是否是回文数
printf("不是回文数");
else
printf("是回文数");
}
上述代码还可以优化,比如在遍历中还可以降低时间复杂度
哈哈哈没人看也就算了
来源:CSDN
作者:王保保嘞小博客
链接:https://blog.csdn.net/qq_45627679/article/details/104181012