P1015 [NOIP1999 普及组] 回文数
点击查看题目
题目描述
若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。
例如:给定一个十进制数 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
在这里的一步是指进行了一次 NN 进制的加法,上例最少用了 44 步得到回文数 48844884。
写一个程序,给定一个 NN(2 \le N \le 102≤N≤10 或 N=16N=16)进制数 MM(100100 位之内),求最少经过几步可以得到回文数。如果在 3030 步以内(包含 3030 步)不可能得到回文数,则输出 Impossible!。
输入格式
两行,分别是 NN,MM。
输出格式
如果能在 3030 步以内得到回文数,输出格式形如 STEP=ans,其中 ansans 为最少得到回文数的步数。
否则输出 Impossible!。
输入样例
10 87
输出样例
STEP=4
- 这道题主要练的是分块的想法
一开始我的想法是高精加一段,数字翻转一段,后来发现高精代码段太长了,再加上标程给的是数组转换一段,加法一段
-->看起来立刻舒服了 - 但还是有一些莫名其妙的问题
就比如说在洛谷上第一次交的时候WA掉了一个点
首次提交代码
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<string.h>
using namespace std;
int n,a[10010],b[10010],ans,l;
void zhuanhuan()//输入加转换
{
string s;
cin>>n>>s;
memset(a,0,sizeof(a));
l=s.length();
for(int i=1;i<=l;i++)
{
if(s[l-i]>='0'&&s[l-i]<='9')a[i]=s[l-i]-'0';
else a[i]=s[l-i]-'A'+10;
}
}
bool check()//判断回文
{
for(int i=1;i<=l;i++)
{
if(a[i]!=a[l-i+1])return false;
}
return true;
}
void gaojing()//进位比较特殊
{
for(int i=1;i<=l;i++)b[i]=a[l-i+1];
for(int i=1;i<=l;i++)a[i]+=b[i];
for(int i=1;i<=l;i++)
{
a[i+1]+=a[i]/n;
a[i]%=n;
}
if(a[l+1]>0)l++;
}
int main()
{
zhuanhuan();
if(check())
{
printf("STEP=0\n");
return 0;
}
for(int ans=1;ans<=30;++ans)
{
gaojing();
if(check())
{
printf("STEP=%d\n",ans);
return 0;
}
}
printf("Impossible");
return 0;
}
20分钟后--错的依旧这么清奇:Impossible后没加'!'
P1015 [NOIP1999 普及组] 回文数的更多相关文章
- [洛谷] P2010 [NOIP2016 普及组] 回文日期
点击查看代码 #include<bits/stdc++.h> using namespace std; int data1, data2, ans = 0, sum; int d[13] ...
- 【洛谷p1015】【一本通p1309】回文数(noip1999)
(过了这个题灰常灰常开心) 好像前两道忘记了传送门: 回文数[传送门] 洛谷算法标签: 其实还有高精度 这个题困死在了十六进制,后来想了想,我们在c[i]中存入一个大于十的数之前的程序也可以实现回文( ...
- luogu10125回文数[noip1999 Day1 T1]
题目描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数. 又如:对于10进制数 ...
- 洛谷 P1015 回文数 Label:续命模拟QAQ
题目描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数. 又如:对于10进制数 ...
- luogu P1015 回文数
题目描述: 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数. 又如:对于10进制 ...
- P1015回文数
传送 回文数的判断有个神奇的公式: g[i]==g[leng+-i] 其中leng为字符串长度,看每个g[i]是否都满足它,若满足,就是回文数 ps:洛谷的impossible有毒,必须得复制题干中的 ...
- 1309:【例1.6】回文数(Noip1999)
传送门:http://ybt.ssoier.cn:8088/problem_show.php?pid=1309 [题目描述] 若一个数(首位不为零)从左向右读与从右向左读都是一样,我们就将其称之为回文 ...
- Java实现 洛谷 P1015 回文数(N进制回文数)
输入输出样例 输入样例#1: 10 87 输出样例#1: STEP=4 import java.util.Scanner; public class 回文数2 { public static void ...
- 合工大OJ 1331 回文数
Description 一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数. 任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其和不是回文数, ...
随机推荐
- js知识框架图
- js中点击返回顶部
window.scrollTo(0, 0);当点击返回顶部的时候调用这个方法即可 handleScrollTop(){ window.scrollTo(0, 0); }
- 上传自己的pip模块
对于模块开发者本质上需要做3件事: 编写模块 将模块进行打包 上传到PyPI(需要先注册PyPI账号) 注册PyPI账号 安装上传工具 基于工具进行上传 对于模块的使用者来说,只需要做2件事: 通过p ...
- spring boot 中使用swagger
一.pom.xml <dependency> <groupId>io.springfox</groupId> <artifactId>springfox ...
- HDURomantic
Problem - 1004 (hdu.edu.cn) 扩展欧几里得解决线性同余方程.先得到gcd的解,再恢复原解,因为知道通解的一般形式,所以通过模来得到最小正整数解.另一个可以通过相减,或者一样的 ...
- promise初体验,小白也能看懂
promise出现的目的一为处理JavaScript里的异步,再就是避免回调地狱. promise有三种状态:pending/reslove/reject . pending就是未决,resolve可 ...
- leetcode 206. 反转链表 及 92. 反转链表 II
206. 反转链表 问题描述 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1-> ...
- vue3代码setup中this为什么无效
结论:setup并没有通过各种方式去绑定this 在vue2中,我们可以在optionsApi中调用this来指向当前组件的实例,但是在vue3的setup中并不能这样做,因为setup位于组件创建成 ...
- 记录ABAP开发的日常——SAP_PO开发同步接口案例
前言:在项目中遇到任务PO接口,需求是SRM发送采购订单信息给SAP,SAP根据信息调用BAPI同步数据,在此作为案例记录. 本次接口采用的协议是SOAP,当然也有其他的协议比如REST等等,在此不做 ...
- golang中锁
一.什么场景下需要用到锁当程序中就一个线程的时候,是不需要加锁的,但是通常实际的代码不会只是单线程,有可能是多个线程同时访问公共资源,所以这个时候就需要用到锁了,那么关于锁的使用场景主要涉及到哪些呢? ...