首页 > 其他分享 >回文数

回文数

时间:2023-05-23 22:35:56浏览次数:36  
标签:10 新数 拆分 数组 权值 回文

一、问题描述

打印所有不超过n(取n<256)的其平方具有对称性质的数(也称回文数)。

二、设计思路

  对于要判定的数n,计算出其平方后(存于a),按照“回文数”的定义要将最高位与最低位、次高位与次低位······进行比较,若彼此相等则为回文数。此算法需要知道平方数的位数,再一一将每一位分解、比较,此方法对于位数已知且位数不是太多的数来说比较适用。
  此问题可借助数组来解决。将平方后的(a的)每一位进行分解,按从低位到高位的顺序依次暂存到数组中,再将数组中的元素按照下标从大到小的顺序重新将其组合成一个数k(如n=15,则a=225 且k=522),若a等于k则可判定a为回文数。
  从低位到高位将某一整数拆分。对于一个整数(设变量名为a)无论其位数多少,若欲将最低位拆分,只需对10进行求模运算a%10;拆分次低位首先要想办法将原来的次低位作为最低位来处理,用原数对10求商可得到由除最低位之外的数形成的新数,且新数的最低位是原数的次低位,根据拆分最低位的方法将次低位求出a/10;a%10;对于其他位上的数算法相同。利用这个方法要解决的一个问题就是,什么情况下才算把所有数都拆分完了呢?当拆分到只剩原数最高位时(即新数为个位数时),再对10求商的话,得到的结果肯定为0,可以通过这个条件判断是否拆分完毕。根据题意,应将每次拆分出来的数据存储到数组中,原数的最低位存到下标为0的位置,次低位存到下标为1的位置⋯⋯依次类推。程序段如下:
for ( i=0;a!=0;i++)
{
m[i]=a%10;
a/=10;
}
  将数组中元素重新组合成一新数。拆分时变量a的最高位仍然存储在数组中下标最大的位置,根据“回文数”定义,新数中数据的顺序与a中数据的顺序相反,所以我们按照下标从大到小的顺序分别取出数组中的元素组成新数k。由几个数字组成一个新数时只需用每一个数字乘以所在位置对应的权值然后相加即可,在编程过程中应该有一个变量t来存储每一位对应的权值,个位权值为1,十位权值为10,百位权值为100⋯⋯,所以可以利用循环,每循环一次t的值就扩大10倍。对应程序段如下:
for ( ;i>0;i--)
{
k+=m[ i-1]*t;
t*=10;
}

三、程序流程图

 

四、代码实现

#include<stdio.h>
void main()
{
int m[16],n,i,t,count=0;
long unsigned a,k;
printf("No.    number    it's square(palindrome)\n");
for(n=1;n<256;n++)
{
k=0;t=1;a=n*n;
for(i=0;a!=0;i++)
{m[i]=a%10;
a/=10;
}
for(;i>0;i--)
{
k+=m[i-1]*t;
t*=10;
}
if(k==a)
printf("%2d%10d%10d\n",++count,n,n*n);
}
}|

 

标签:10,新数,拆分,数组,权值,回文
From: https://www.cnblogs.com/jais/p/17426575.html

相关文章

  • 力扣 647. 回文子串
    647.回文子串给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。回文字符串 是正着读和倒过来读一样的字符串。子字符串 是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。示......
  • 回文串和回文自动机
    1PAM简介1.1PAM的形式PAM是一个自动机,它的普通边组成了两棵树,fail边组成了一棵树。这两棵普通树分别表示主串中所有奇数长度的回文串和偶数长度的回文串,其根节点分别叫做“奇根”和“偶根”。普通边上有字母(类似trie/SAM的普通边,都是存\(\sum\)个外链,但是有一些是无......
  • 回文数
    ```#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#defineN10voidmain(){   intn[N];   inti,j,k,s=0,flag,a;   for(i=0;i<=256;i++)   {       a=i*i;flag=1;s=1;       for(j=10;a/j!=0;s......
  • response返回文件给前端
    @GetMapping("/getPdf2")publicvoidgetPdf2(HttpServletResponseresponse)throwsIOException{Filefile=newFile("D://aasd.pdf");FileInputStreamfileInputStream=newFileInputStream(file);ServletOu......
  • abc242E 求解小于等于一个字符串的回文串的个数
    题目链接:E-(∀x∀)考虑26进制,将字母A~Z折算成数字0~25,求得最大的可能的回文字符串的26进制值即为答案//>>>Qiansui#include<map>#include<set>#include<stack>#include<cmath>#include<queue>#include<deque>#include<cstdio>#include<string&......
  • 3.4 回文数
    打印所有不超过n(取n<256)的其平方具有对称性质的数(也称回文数)。 #include<stdio.h>voidmain(){intm[16],n,i,t,count=0;longunsigneda,k;printf("No.numberit'ssguare(palindrome)An");for(n=1;n<256;n++)/*穷举n的取值范围*/k-0;t-1;a=n*n;/*计算n的平......
  • 3.4回文数
    1.问题描述打印所有不超过n的其平方具有对称性的数2.代码#include<iostream>usingnamespacestd;intmain(){ intn,i,num,temp,m; n=256; for(i=1;i<256;i++) { num=i*i; m=0; while(num>0) { temp=num%10;//取最后一位 m=temp+m*10;// num=num/1......
  • [每天例题]蓝桥杯 C语言 回文日期
    回文日期题目    思路分析1.由于题目要求是找到一定范围日期内的回文日期,所以我们可以采用for遍历日期2.再调用函数先判断闰年,再进行日期合法判断,最后再进行回文数判断3.注意,该日期范围包含起始和结束这两个日期,这里会有一个案例挖坑代码#include<stdio.h>int......
  • 图解LeetCode——234. 回文链表
    一、题目给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。二、示例2.1>示例1:【输入】head=[1,2,2,1]【输出】true2.2>示例2:【输入】head=[1,2]【输出】false提示:链表中节点数目在范围[1,10^5]内0<=Node.v......
  • 3.4回文数
    一问题描述打印不超过256的其平方为对称的回文数的数二设计思路先平方后判断奇偶,然后找到需要对照判断的位数,然后一一对应判断,若为回文数则输出三程序流程图 四伪代码实现//回文数#include<bits/stdc++.h>usingnamespacestd;intmain(){ intn=256; for(inti=0;i<=n;......