判断一个数是否是对称数(数组/非数组解法)

简介: 判断一个数是否是对称数(数组/非数组解法)

非数组法:


核心:将一个数从左到右倒过来(倒序)变成新数,判断是否与原来的数相同


难点:倒叙输出无法满足形成新数


scanf("%d",&n);

while(n)

{

print("%d",n%10);

n/10

}

解法:找到每一位数以后,乘10并不断左移(操作)


例如1234.  (操作过程见上)


找到4,操作以后,变成40,加上下一位数(3),变成43


操作以后,变成430,加上下一位数(2),变成432


操作以后,变成4320,加上下一位数(1),变成4321.(完成新数)


具体代码:

#include<stdio.h>
int main()
{
  int mx = 0;//mx为旧数  1
  scanf("%d", &mx);
  int m = mx;//备份一份旧数,最后与新数做比较  2 
  int n = 0;;//新数的创建  3  
  while (m)
  {
    int x = m % 10;//为了不改变m的值,创建一个x来接收每一位   4 
    n = n * 10 + x;
    m/=10;
  }
  if (n == mx)
  {
    printf("%d是对称数 ", mx);
  }
  else
      printf("想得美");
        return 0;
}

注意点:代码中为了保存原数值不被改变,采用了创建一个新变量来备份的方式(2,4)


数组法:


核心:将一个数存入数组中,通过逐个比较首尾元素,进行判断


难点:1.要控制数组拿位置的循环,同时也要控制 数 取出所有位的循环


          解决方法:for循环里加个if,实现双控制


          2.数组中,头元素head和尾元素hail的逐个判断(hail--),终止条件的选择


          解决方法:取特殊位置,       0 1 2。2/2=1。       0 1 2 3。3/2=1。

#include<stdio.h>
int main()
{
  int a,tail ,head , i, arr[1000];
  int flag = 1;//设置判断符,不更改为0,即是对称数  1
  scanf("%d", &a);
  int ma = a;//备份
  if (a< 10)//对称数起码是二位数
  {
    return 0;
  }
  for (i = 0; i < 1000; i++)//可以实现,数组用多少(位)拿多少
  {
    arr[i] = a % 10;
    a /= 10;
    if (a == 0) //循环跳出条件,此时for循环中有两个控制条件
      break;
  }
  for (tail = i,head = 0; head <= i / 2; head++)
  {
    if (arr[head] != arr[tail])
    {
      flag = 0;//若更改为0,不是对称数  2
      break;
    }
    tail--;
  }
  if (flag == 1)
    printf("%d是对称数", ma);
  else
    printf("你在想什么?");
  return 0;
}

非数组法:法二

(未完待续)

相关文章
|
7月前
【Leetcode 2645】构造有效字符串的最小插入数 —— 动态规划
状态定义:`d[i]`为将前 i 个字符拼凑成若干个 abc 所需要的最小插入数。状态转移方程: 如果` word[i]>word[i−1]`,那么`word[i]`可以和`word[i−1]`在同一组 abc 中,`d[i]=d[i−1]−1` ;否则`word[i]`单独存在于一组 abc 中,`d[i]=d[i−1]+2`
|
7月前
力扣421. 数组中两个数的最大异或值(字典树)
力扣421. 数组中两个数的最大异或值(字典树)
|
7月前
|
存储 算法 Java
数据结构和算法面试题:给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
数据结构和算法面试题:给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
92 0
判断数的奇偶性
判断数的奇偶性
100 0
剑指offer_数组---把数组排成最小的数
剑指offer_数组---把数组排成最小的数
49 0
剑指offer_数组---最小的K个数
剑指offer_数组---最小的K个数
50 0
【day05】LeetCode(力扣)每日一刷[1464. 数组中两元素的最大乘积][347. 前 K 个高频元素][2163. 删除元素后和的最小差值 ]
了解[1464. 数组中两元素的最大乘积][347. 前 K 个高频元素][2163. 删除元素后和的最小差值 ]。
113 0
【day05】LeetCode(力扣)每日一刷[1464. 数组中两元素的最大乘积][347. 前 K 个高频元素][2163. 删除元素后和的最小差值 ]
|
Java 测试技术 Python
刷题3:给定一个数组 nums,判断 nums 中是否存在三个下标 a,b,c数相加等于targe且a,b,c不相等
刷题3:给定一个数组 nums,判断 nums 中是否存在三个下标 a,b,c数相加等于targe且a,b,c不相等
刷题3:给定一个数组 nums,判断 nums 中是否存在三个下标 a,b,c数相加等于targe且a,b,c不相等
|
C语言 UED
[解题报告]【第36题】给定一个数,判断这个数是不是素数
[解题报告]【第36题】给定一个数,判断这个数是不是素数
[解题报告]【第36题】给定一个数,判断这个数是不是素数