【蓝桥杯】1434:回文数字—>三种判断回文的方法(下)

简介: 【蓝桥杯】1434:回文数字—>三种判断回文的方法(下)

二、利用栈的数据结构判断回文:

我们知道栈的特性是先入后出,即先进入的元素后出,那么判断回文恰恰可以利用栈这一特性,将前面一般的元素入栈后,再依次出栈与后面一半的元素相比较,如果相同,那么就说明这串字符为回文字符。

代码如下:

int main()
{
  int n = 0;
  scanf("%d", &n);
  int num = 0;
  //生成数字
  for (num = 10000; num <= 999999; num++)
  {
    int tmp = num;
    int sum = 0;
    int count = 0;
    //计算位数之和
    while (tmp)
    {
      sum += tmp % 10;
      tmp = tmp / 10;
      //统计位数
      count++;
    }
    int flag = 1;
    //判断回文
    SeqStack s;
    //将前一半字符入栈
    for (i = 0; i < count / 2; i++)
    {
      Push(s, str[i]);
    }
    if (count % 2) // 若输入字符为奇数个时自动跳过中间的字符
      i++;
    while (!EmptyStack(s))
    {
      Pop(s, e);
      if (e!= str[i])
      {
        flag = 0;
        break;
      }
      else
        i++;
    }
    //判断是否同时满足两个条件,并输出
    if (sum == n && flag == 1)
    {
      printf("%d\n", num);
    }
  }
  return 0;
}

三、直接反转数字:

直接反转数字的方法是一种很巧妙的方法,他的思想可以理解为取某个整数每一位的逆过程,我们知道想要的到某个整数的每一位只需要每次%10,再/10即可,那么直接反转数字的方法就是该过程的逆过程,代码实现也非常简单。

int main()
{
  int n;
  int flag = 0;
  scanf("%d", &n);
  int num = 0;
  for (num = 10000;  num <=999999;  num++)
  {
    //创建临时变量tmp,循环中利用tmp进行操作,不会影响num的值
    int tmp = num;
    int t = 0;
    int sum = 0;
    while (tmp)
    {
      //这里t计算得到的值就是该串字符反转后的值
      t = t * 10 + tmp % 10;
      sum += tmp % 10;
      tmp /= 10;
    }
    if (t == num && sum == n)
    {
      flag = 1;
      printf("%d\n", num);
    }
  }
  return 0;
}

这个代码最重要的思想就是   t = t * 10 + tmp % 10;

掌握后在进行回文判断上十分简单,并且这种方式的时间复杂度与空间复杂度相较前两种方式都有了显著提高。

目录
相关文章
|
5月前
|
存储 Java
Java判断质数、求所有约数【蓝桥杯常用方法】
Java判断质数、求所有约数【蓝桥杯常用方法】
【蓝桥杯】1434:回文数字—>三种判断回文的方法(上)
【蓝桥杯】1434:回文数字—>三种判断回文的方法
119 0
|
5月前
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-992 士兵杀敌(二)
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-992 士兵杀敌(二)
66 1
|
5月前
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
102 0
|
5月前
|
Java C语言 C++
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1000 kAc给糖果你吃
78 0
|
5月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-999 数的潜能
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-999 数的潜能
80 0
|
5月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-997 粘木棍
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-997 粘木棍
84 0
|
5月前
|
机器学习/深度学习 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-996 车的放置
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-996 车的放置
88 0
|
5月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-986 藏匿的刺客
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-986 藏匿的刺客
88 0
|
5月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-985 幸运的店家
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-985 幸运的店家
78 0