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

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

非数组法:


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


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


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;
}

非数组法:法二

(未完待续)

相关文章
|
6天前
【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`
|
6天前
|
算法 测试技术 C#
【位运算 试填法】【推荐】3022. 给定操作次数内使剩余元素的或值最小
【位运算 试填法】【推荐】3022. 给定操作次数内使剩余元素的或值最小
|
6天前
|
算法 测试技术 C++
【位运算 贪心】2835. 使子序列的和等于目标的最少操作次数
【位运算 贪心】2835. 使子序列的和等于目标的最少操作次数
【位运算 贪心】2835. 使子序列的和等于目标的最少操作次数
|
6天前
|
算法
算法题解-长度最小的子数组
算法题解-长度最小的子数组
|
11月前
判断数的奇偶性
判断数的奇偶性
52 0
|
算法
算法练习——(1)找数组中唯一成对的那个数(异或)
——如何找数组中唯一成对的那个数(数组特殊) 1-1000这一千个数放在含有1001个元素的数组中,只有唯一的一个元素值重复,其他均只出现一次。 每个数组元素只能访问一次,设计一个算法,将他找出来;不用辅助储存空间,设计一个算法实现.
统计正数和负数的个数然后计算这些数的平均值(循环、数组解法)
统计正数和负数的个数然后计算这些数的平均值(循环、数组解法)
134 0
leetcode【数组—中等】209.长度最小的子数组
leetcode【数组—中等】209.长度最小的子数组
leetcode【数组—中等】209.长度最小的子数组
|
机器学习/深度学习 存储 算法
【简单算法】1.两数之和,给定整数数组和目标值,找出数组中2数之和等于目标值的元素
【简单算法】1.两数之和,给定整数数组和目标值,找出数组中2数之和等于目标值的元素
【简单算法】1.两数之和,给定整数数组和目标值,找出数组中2数之和等于目标值的元素