luogu P1015 回文数
题目描述:
若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。
例如:给定一个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
输入样例:
10
87
输出样例:
STEP=4
难度:简单
这道题主要考查两点:reverse和check。
将数存成数组的形式(也就是高精度的写法),reverse就很好写(swap一下)。
源代码如下:
/*
About: luogu_P1015_回文数
Auther: kongse_qi
Date:2017/04/21
*/
#include <bits/stdc++.h>
#define maxn 10005
using namespace std;
int Base, times;
string n;
struct qi
{
int len, s[maxn], base;
qi ()//初始化结构体
{
memset(s, 0, sizeof s);
len = 0;
base = Base;
}
qi (string a, int b)//也是初始化(用于输入)
{
len = a.size();
for(int i = 0; i < len; i++)
{
if(a[len-1-i] >= 'A')
{
s[i] = a[len-i-1] -'A'+10;
}
else
{
s[i] = a[len-i-1] -'0';
}
}
base = b;
}
qi operator + (const qi &b)//+
{
qi c;
c.len = 0;
for(int i = 0, g = 0; g || i < max(len, b.len); i++)
{
int x = g;
if(i < len) x += s[i];
if(i < b.len) x += b.s[i];
c.s[c.len++] = x % base;
g = x / base;
}
return c;
}
qi operator = (const qi &x)//复制
{
len = x.len;
for(unsigned i = 0; i != len; ++i)
{
s[i] = x.s[i];
}
base = x.base;
}
qi operator += (const qi &x)//就是做上面写好的"+"
{
*this = *this+x;
return *this;
}
void reverse()//反转
{
for(unsigned i = 0; i != len/2; ++i)
{
swap(s[i], s[len-1-i]);
}
return ;
}
}x,y;
void Init()
{
scanf("%d", &Base);
cin >> n;
x = qi(n, Base);
return ;
}
bool check(const qi &a)
{
for(unsigned i = 0; i != a.len/2; ++i)
{
if(a.s[i] != a.s[a.len-i-1]) return false;
}
return true;
}
void Add()
{
do
{
y = x;//copy
x.reverse();//结构体函数
x += y;
++times;
}
while(!check(x) && times < 31);
if(times < 31)
{
cout << "STEP=" << times;
}
else
{
cout <<"Impossible!";
}
return ;
}
int main()
{
Init();
Add();
return 0;
}
自此完成。
箜瑟_qi 2017.04.21 12:17
luogu P1015 回文数的更多相关文章
- 洛谷 P1015 回文数 Label:续命模拟QAQ
题目描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数. 又如:对于10进制数 ...
- P1015回文数
传送 回文数的判断有个神奇的公式: g[i]==g[leng+-i] 其中leng为字符串长度,看每个g[i]是否都满足它,若满足,就是回文数 ps:洛谷的impossible有毒,必须得复制题干中的 ...
- Java实现 洛谷 P1015 回文数(N进制回文数)
输入输出样例 输入样例#1: 10 87 输出样例#1: STEP=4 import java.util.Scanner; public class 回文数2 { public static void ...
- 洛谷 P1015 回文数
#include<iostream> #include<cstdio> #include<cmath> #include<string> #includ ...
- P1015 回文数解题思路(非原创)
测试 #include<bits/stdc++.h> using namespace std; int n,m,step; string nn; int len,nex; bool dfs ...
- 【洛谷p1015】【一本通p1309】回文数(noip1999)
(过了这个题灰常灰常开心) 好像前两道忘记了传送门: 回文数[传送门] 洛谷算法标签: 其实还有高精度 这个题困死在了十六进制,后来想了想,我们在c[i]中存入一个大于十的数之前的程序也可以实现回文( ...
- P1015 [NOIP1999 普及组] 回文数
点击查看题目 题目描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个十进制数 5656,将 5656 加 6565(即把 5656 从右向左读),得到 ...
- 洛谷—— P1609 最小回文数
https://www.luogu.org/problemnew/show/1609 题目描述 回文数是从左向右读和从右向左读结果一样的数字串. 例如:121.44 和3是回文数,175和36不是. ...
- hdu1282回文数猜想
Problem Description 一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数.任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其 ...
随机推荐
- LSTM基础
DNN,CNN,RNN:1.DNN:深度神经网络,或称多层感知机.解决早期单层感知机对于复杂函数不能模拟的情况.其形式为层之间全连接.实用sig等连续性函数模拟神经对机理的响应,训练算法使用 B ...
- nodeJS之eventproxy源码解读
1.源码缩影 !(function (name, definition) { var hasDefine = typeof define === 'function', //检查上下文环境是否为AMD ...
- c++学习笔记之封装篇(上)
title: c++学习笔记之封装篇(上) date: 2017-03-12 18:59:01 tags: [c++,c,封装,类] categories: [学习,程序员,c/c++] --- 一. ...
- CoreCLR源码探索(四) GC内存收集器的内部实现 分析篇
在这篇中我将讲述GC Collector内部的实现, 这是CoreCLR中除了JIT以外最复杂部分,下面一些概念目前尚未有公开的文档和书籍讲到. 为了分析这部分我花了一个多月的时间,期间也多次向Cor ...
- ATS来了,网页HTTP访问怎么办?
推荐理由 ATS(App Transport Security),是苹果在WWDC 15提出的,苹果将收紧http的访问,这样会造成我们周边的许多站点和应用均不能正常访问,这里就对ATS进行了简单分析 ...
- Java的标识符,数据类型与各种运算符
一.标识符 用作给变量.类和方法命名 java强调标识符有如下命名规则: 标识符必须以字母,下划线_,美元$开头 标识符其他部分可以是字母,下划线"_",美元符"$&qu ...
- 【C语言】printf()函数详解
printf函数称为格式输出函数,其关键字最末一个字母f即为"格式"(format)之意.其功能是按用户指定的格式,把指定的数据显示到显示器屏幕上.在前面的例题中我们已多次使用过这 ...
- 老李推荐:第2章1节《MonkeyRunner源码剖析》了解你的测试对象: NotePad应用简介
老李推荐:第2章1节<MonkeyRunner源码剖析>了解你的测试对象: NotePad应用简介 本书脚本相关的示例常会用到Android SDK自带的NotePad这个应用,所以这 ...
- 容易忽略的z-index失效问题
前些天写一个模仿虎牙网站幻灯片的插件,期间遇到我一直都没注意到的问题,就是z-idnex会失效的问题. 我是将幻灯片的左右按设置为float浮动的,然后在调试点击的时候发现无论怎么调高z-index都 ...
- 关于WdatePicker.js的结束时间大于开始时间
简单笔记 : WdatePicker.js 要使结束时间大于开始时间只要在线束时间的 minDate:'#F{$dp.$D(\'stimeParam\')}' 即可:不多说 详细代码如下: <t ...