作者简介:大家好,我是大杉。
个人主页:爱编程的大杉
支持我:点赞+收藏~不迷路
✔系列专栏:c语言入门每日一题
(❁´◡`❁)每日格言:“我只知:
星光不负赶路人,时光不服有心人。
这个世界真的有人过着你想要的生活。
而那些人都曾隐忍过你尚未经历的挫折
)回文是指正读和反读都一样的数。例如121,555,67776都是回文数。编写一个算法,读取几个整数,打印它们是否是回文数,判断回文的一个方法是将该数字的逆序数与之进行比较-1)**
思路一:将回文数按照逆序表示出来,检查是否与之前相等
思路二:运用数组的方法,将输入的数看作字符串,定义一个字符串数组,两端缩进进行比较。
代码如下(示例):
#include
int main()
{
int number, reversed, temp;
printf("input number:");
scanf_s("%d", &number);
temp = number; /*暂存*/
reversed = 0;
while (temp != 0)
{
reversed = reversed * 10 + temp % 10; /*求余数,向左移位相加*/
temp = temp / 10;
}
if (number == reversed)
{
printf("it's palindrome.\n");
}
else
{
printf("it's not palindrome.\n");
}
代码如下(示例):
#include
using namespace std;//c++的头文件
int main()
{
char arr[10] = { 0 };
cout << "请输入正数" << endl;
ren:cin >> (arr);//cin相当于c中的scanf
int len = strlen(arr) - 1;
int flag = 0;
int a = 0;
if (arr[0]==45)//排除输入为负数情况
//负号的阿斯课码值为45,若第一个输入的为负号则代表为负数不符合题意
{
cout << "输入错误" << endl;
//cout为c++中的输出流相当于printf
goto ren;//goto语句再次形成一次循环
}
while (flag != strlen(arr) / 2)
{
for (int a = 0; a < strlen(arr) / 2; a++)
{
if (arr[a] == arr[len])
{
flag++;//flag标记作用,显示比较了几次
len = len--;
}
}
if (flag == strlen(arr) / 2)
{
cout << "这个数是回文数" << endl;
goto ren;
}
else
{
cout << "这个数不是回文数" << endl;
goto ren;
}
return 0;
}
**若输入的数是回文数,则应该比较(字符串长度/2次)**如下图所示
两种方法各有优缺点:
第一种方法:好处:代码简洁,容易理解。
缺点:程序执行一次只能判断一个数是否为回文数,如果判断几个数的话需要多执行几次代码
第二种方法:好处:程序执行一次,可以一直判断。
缺点:程序相比第一种有些复杂,不针对此题的描述,因为此题是让你以数的形式输入。具有相对局限性
综上:如果针对此题则优先选择第一种方法,如果不限制以数字(含以上的)输入且考虑实用性则选择第二种。
对于算法题,我们要善于打开自己的思路,不断探索新的方法,哪有问了:为什么你能想到这么多思路,其实秘密就在我最近发现的宝藏网站,牛客网,这个网站不仅有 c ,java,phyon,c++等由浅入深的语法知识,还能在线Oj培养面试笔试能力。更让我爱了是他的讨论区,真是大佬云集,给我增添了很多思路,对我产生了很大启发, 这里分享一个牛客c语言提单:牛客c语言题单大家一起练起来吧!