回文数 (luogu P1015)

整数反转与回文数问题 整数反转与回文数问题 将整数最高位变为最低位,对称反转。反转后的数字与原数字相等即为回文数。 整数反转 初始思路 将数字转换为字符串数组,数组反转 。利用 StringBuilder 的reverse函数。 这种方法效率并不高,但容易理解与思考 优化题解 考虑到每一位数字之间是10进制的关系,可以将数字看做一个栈,利用取余(%10)得到顶部数据。第一个数字是个位数字,第二个数字是个位数字乘以10加上十位数字,依次迭代可以得到反转数字。 注意反转的时候可能会产生溢出的数字,即 当数字乘以10大于最大值, 阅读详情

题目描述

若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。

例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数。

又如:对于10进制数87:

STEP1:87+78 = 165 STEP2:165+561 = 726

STEP3:726+627 = 1353 STEP4:1353+3531 = 4884

在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。

写一个程序,给定一个N(2<=N<=10,N=16)进制数M(100位之内),求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible!”

输入输出格式

输入格式:

两行,分别是N,M。

输出格式:

STEP=ans

输入输出样例

输入样例#1: 

10

87

输出样例#1: 

STEP=4

#include<iostream>
#include<cstdio>
#include<cstring>
char str1[1000],str2[1000],str3[1000];
char M[1000];

int len1,len2,len3;
void add(int jinzhi, char str1[1000], int n1, char str2[1000], int n2, char str3[1000], int &n3)
{
	int i,val,jinwei,max;
	if(n1<=n2)
	{
		max=n2;
		for(i=n1;i<n2;i++)
			str1[i]=0;
	}
	else
	{
		max=n1;
		for(i=n2;i<n1;i++)
			str2[i]=0;	
	}
	jinwei=0;
	for(i=0; i<max; i++)
	{
		val=str1[i]+str2[i]+jinwei;
		jinwei=val/jinzhi;
		val=val%jinzhi;
		str3[i]=val;	
	}
	str3[max]=jinwei;
	if(jinwei>0)
		n3=max+1;
	else
		n3=max;
}

int duicheng(char s[], int len)
{
	int i,flag=1;
	for(i=0;i<len/2+1;i++)
		if(s[i]!=s[len-1-i])
		{
			flag=0;
			break;
		}
	return flag;
}

void reverse(char s1[], char s2[], int len)
{
	int i;
	for(i=0;i<len;i++)
		s2[i]=s1[len-1-i];
}

int main()
{
	int i,j,len,N;
	scanf("%d%s",&N,M);
	len=strlen(M);
	if(N==16)
	{
		for(i=0;i<len;i++)
			if(M[i]>='A' && M[i]<='F')
				M[i]=10+M[i]-'A';
			else if(M[i]>='a' && M[i]<='f')
				M[i]=10+M[i]-'a';
			else M[i]=M[i]-'0';			
	}
	else
	{
		for(i=0;i<len;i++)
			M[i]=M[i]-'0';			
	}
	len1=len;
	for(i=0;i<len;i++)
		str1[i]=M[i];
	for(i=1;i<=30;i++)
	{
		reverse(str1,str2,len1);
		add(N,str1,len1,str2,len1,str3,len3);
		for(j=0;j<len3;j++)
			str1[j]=str3[j];
		len1=len3;
		if(duicheng(str1,len1))
		{
			printf("STEP=%d",i);
			return 0;
		}
	}
	printf("Impossible!");
	return 0;
}

 

用C++编写回文数 用C++编写的回文数的代码。采用for循环语句,代码简单易懂,适合初学者学习应用。 立即下载

相关推荐

PX4实战指南:通过遥控器通道直连实现舵机PWM控制

本文详细介绍了如何通过PX4飞控实现遥控器通道直连控制舵机PWM输出的完整流程。从硬件准备、遥控器配对到PX4参数配置和硬件连接,提供了实战技巧和常见问题解决方案,帮助无人机爱好者快速掌握舵机控制技术。重点讲解了AUX Passthrough模式设置和PWM参数调整等关键步骤。

weixin_29195217的博客 153

洛谷 P1015 回文数 Label:续命模拟QAQ

题目描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。 例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数。 又如:对于10进制数87: STEP1:87+78 = 165 STEP2:165+561 = 726 STEP3:726+627 = 1353 STEP4:1353+3531 = 4884 在这里的一步是指...

weixin_34199405的博客 325

MediaCreationToolW11:Windows11系统升级与修复利器

在日常使用Windows11系统的过程中,我们可能会遇到一些棘手的问题,比如系统更新时出现异常导致无法成功更新,或者系统本身出现异常需要进行无损修复。此外,当我们的电脑尚未升级到Windows11,而我们又希望进行升级时,一款高效且可靠的工具就显得尤为重要。接下来,MediaCreationToolW11将开始下载Windows11的安装文件,并创建Windows11介质。在“选择你要执行的操作”界面中,选择“ISO文件”。此时,你可以使用你的账户登录系统,并开始使用全新的Windows11系统了。

nntxthml的博客 2404

【C++】回文数题目(进阶版)

如果把一个数的各个数位上的数字颠倒过来得到的新数与原数相等,则此数是回文数,例:7, 22,131, 2112, 31013…使n成为回文数的最少处理次数。若开始给出的n是回文数,则输出0(即不需任何处理)给出n 后,求出使该数按照以上规则进行一系列处理后成为回文数的最少操作次数。对任意给出的一个整数n,经过一系列的处理,最后都能成为回文数。处理的方法是,该数加上它的颠倒数,例如:n=176。第四次处理后   7546+6457=14003。此时成为回文数,共进行5次处理。

ProminentWu的博客 1488

【雷达图】R语言绘制雷达图(ggradar),NBA季后赛数据为例

一起用R语言给nba球星画球技雷达图吧!

池塘春草梦的博客 6252

【笔记整理】轻量级神经网络 MobileNetV3

【笔记整理】轻量级神经网络 MobileNetV3

qq_33934427的博客 4274

算法——回文数

回文数的算法:第一位等于最后一位,第二位等于倒数第二位...以此类推。这种数称为回文数 算法分析: 1.我们可以将该数的每个数拆开,然后将顺序颠倒再拼起来得到一个全新的数,如果该数和原来的数相同则该数为回文数。 代码如下: class Judgement { private int num; void setNum(int num) { this.

lad_proer的博客 1017

风力摆控制系统 PCB 设计 3 要点:STM32+MPU6050+空心杯电机驱动一体化

本文详细解析了风力摆控制系统PCB设计的3大核心要点,重点介绍STM32主控、MPU6050姿态传感器与空心杯电机驱动的一体化方案。通过系统架构设计、PCB布局布线技巧以及噪声抑制方案,帮助参赛者在电子设计竞赛中构建高精度、高稳定性的风力摆控制系统,提升竞赛作品性能。

weixin_30363285的博客 359

1083 - 【基础】回文数

回文数的定义为如果把一个数的各个数位上的数字颠倒过来得到的新数与原数相等,则此数是回文数,例7,22,131,2112,31013,…对任意给出的一个整数n,经过一系列的处理,最后都能成为回文数。处理的方法是,该数加上它的颠倒数,使n成为回文数的最少处理次数。若开始给出的n是回文数,则输出0(即不需任何处理)。问题给出n后,求出使该数按照以上规则进行一系列处理后成为回文数的最少操作次数。大家好,我是屁孩君,今天给大家带来递归版的回文数。...

屁孩君的博客呀!! 4710

2022年华为ICT大赛 全球总决赛!中文综合任务书-网络赛道真题!

2022年华为ICT大赛 全球总决赛!综合任务书-网络赛道真题-中文翻译版

君逍遥o 2402

rk3568 适配以太网(mac 2 mac)

MDIO(Management Data Input/Output)是一种管理数据输入/输出协议,用于在以太网交换机和PHY(物理层收发器)之间进行通信。在Android中,MDIO总线用于控制网络接口的PHY芯片,例如通过MDIO总线访问PHY芯片的寄存器。这些寄存器包含了一些关于网络连接状态、链路速度和其他计算机网络相关信息的数据。MDIO总线通常由网络接口控制器(NIC)使用,以便在OS中管理PHY芯片。在Android设备上,MDIO总线通常由内核驱动程序管理,并且可以通过 /sys/bus/mdi

weixin_35723192的博客 2453

算法分析---回文数判断

有这样一类数字,他们顺着看和倒着看是相同的数,例如:1111,1221,2332等,这样的数字就称为:回文数字。 回文数的判断有多种算法,直观一点的就是将数字顺序颠倒后再与原数字进行比较,如果相等说明该数字是回文数字,如何颠倒数字的顺序便是难点。 比如一个数12345。 12345 % 10 得到的是个位上的5 12345 / 10 得到1234 1234 % 10 得到十位上的...

weixin_30569033的博客 546

Ubuntu Rtx3090 Cuda11.7 安装 pytorch3d

pytorch ubuntu pytorch3d 安装

G果的博客 2272

[luogu p1015] 回文数

传送门 题面 题面描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。 例如:给定一个十进制数\(56\),将\(56\)加\(65\)(即把\(56\)从右向左读),得到\(121\)是一个回文数。 又如:对于十进制数\(87\): STEP1:\(87+78 = 165\) STEP2:\(165+561 = 726\) STEP3:\(726+627 ...

crab_xbc的博客 210

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Luogu P1015 回文数

题目描述详见Luogu P1015 回文数需要进行N进制的加法,十进制及以下的好说,但十六进制略恶心了。于是还是想到了强大的STL,用vector算高精。有了vector,那么是否回文数也好判断了,从头尾同时进行遍历,判断。对于十六进制,直接读入的时候处理一下,读到A到F直接存成相应的十进制数就好了。#include&lt;iostream&gt; #include&lt;cstdio&gt; #...

qq_18352005的博客 382

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

luogu P1015 回文数

P1015 回文数 题目描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。 例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数。 又如:对于10进制数87: STEP1:87+78 = 165 STEP2:165+561 = 726 STEP3:726+627 = 1353 STEP4:1353+3531 ...

anjian3128的专栏 131

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

luogu P1015回文数 模拟

题目链接:https://www.luogu.org/problemnew/show/P1015 题目大意:给一个进制为 nnn 的数 mmm,若经过 kkk 次使得 m[=m+reverse(m)]m[=m+reverse(m)]m[=m+reverse(m)] 为回文数,输出 kkk,若 k&gt;=30k&gt;=30k>=30,则输出 Impossible! #in...

looeyWei的博客 296

【NOIP】1999真题解析 luogu-P1015 回文数 | GESP四、五级以上可练习

NOIP 1999 普及组真题,主要考察以及。解题的核心是将数字看作字符串处理,在循环累加中验证回文特征。适合GESP四、五级以上考生练习。题目难度⭐⭐☆☆☆,洛谷难度等级普及−。

CoderCoding的博客 205

回文数

P1015 回文数,字符串模拟。

欢迎您的光顾awa 171

洛谷P1015 回文数

题目描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。 例如:给定一个十进制数5656,将5656加6565(即把5656从右向左读),得到121121是一个回文数。 又如:对于十进制数8787: STEP1:87+78=16587+78=165 STEP2:165+561=726165+561=726 STEP3:726+627=1353726+627=1353 STEP4:1353+3531=48841353+3531=4884 在这里的一步是...

lzx_xzl_______的博客 617

luogu_1015 回文数

#include<bits/stdc++.h>using namespace std;int n,a[1010],t,b[1010];string m;void add(){ for(int i=1;i<=a[0];i++)b[a[0]-i+1]=a[i]; for(int i=1;i<=a[0];i++){ a[i]+=b[i]; a[i+1]+=a[i]/n; a[i...

weixin_30642029的博客 78

【NOIP1999】【Luogu1015】回文数(高精度,模拟)

problem 给定一个n进制的数m 每次进行如下操作:反转(比如把56变成65)后两数相加,得新数。 求最少经过几步可以得到新数为回文数,超过30步输出Impossible! solution 判断回文或者反转一个数可以用STL的reverse。 两n进制数相加模拟高精即可(竖式手算 codes #include<iostream&g...

weixin_30633949的博客 315

【题解】洛谷P1801 黑匣子(堆)

怎么求一个堆内的第k小的值呢?我们可以把问题化为两个堆来解决。 存一个大根堆一个小根堆,小根堆负责读入元素。a数组记录要读的元素,b数组记录当前位置。读入当前的范围内饱含的元素,并把这个元素放到小根堆里,如果大根堆非空(注意!!!)并且大根堆堆顶比小根堆堆顶要大就交换堆顶,最后输出小根堆堆顶,把它堆顶扔到大根堆里,代表已经找到了第i小的数。关于大根堆里的数是否能更新小根堆上面已经操作过了。 ...

Rem_Inory的博客 321
上一篇: 拼数 (luogu P1012)
下一篇: 矩形 (P1191)
xifengcode
博客等级 码龄9年 529粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值