题解 P1017 【进制转换】
我赶jio这个题难道是让我们写快写?
不管了,赶紧把咕咕咕了一万年的题解写出来。
这个题就是考察负进制和在mod意义下的除法运算的基础运算。
(其实也没多大问题)
首先我们先假设一个原始数据\(num\)和基底\(base(1\leq base\leq20)\)
然后不妨设\(num=a*base+b\)(且$b = num\space mod\space a $ )
重点来了!
如果\(b<0\),我们就\(b-base,a+1\),很明显这样做是正确的。
为啥呢?因为base是负数。负数减去一个比第一个负数大的负数肯定是个正数,而且不影响后面的数字的拆开。
(恒等变换自己拆开式子便知道了)
我们其实只需要\(b\)这一个数据,让\(a*base\)留在原来剩下的num中继续递归就可以。
最后一个坑:
窝一开始设的char[]="0123456789ABCDEF"
,有两个错误:
- 没有'G'
- 输出基本是空的(我也不知道为啥
不管了放个cpp
#include <iostream>
#include <cstdio>
#include <stack>
#include <string>
using namespace std;
//用了string类型再错就去世
string str="0123456789ABCDEFG";
string realans="";
//注意我使用了传址调用,直接修改num的值
char getachar(int key,int &num,const int &base)
{
if (key<0)
key-=base,num+=base;
return str[key];//返回应该有的值
}
//工作函数,有点像快速输出的赶jio
void work(int num,int base)
{
if (num==0)return;
char ch=getachar(num%base,num,base);
//先记录一下当前的字符
//然后再直接下一层调用
work(num/base,base);
//最后注意将这一位上的放在原先的后面
//短除法的精髓所在
realans=realans+ch;
}
int main()
{
int num,jidi;
cin>>num>>jidi;
work(num,jidi);
//畅快的输出
cout<<num<<'='<<realans<<"(base"<<jidi<<')'<<endl;
return 0;
}
再放一个快速输出的板子,让读者自己感受一下qwq
//输出一个数字
template<typename T>void write(T num)
{
if (num<0)putchar('-'),num=-num;
if (num>9)write<T>(num/10);
putchar('0'+num%10);
}
//特化函数
void writeln(){}
//输出多个数字,默认空格隔开
template<const char split=' ',class T1,class ...T2>
void writeln(T1 &num,T2 &...rest)
{
write<T1>(num);
putchar(split);
writeln(rest...);
}
题解 P1017 【进制转换】的更多相关文章
- 洛谷P1017 进制转换
洛谷P1017 进制转换 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 \(1*10 ...
- 洛谷p1017 进制转换(2000noip提高组)
洛谷P1017 进制转换 题意分析 给出一个数n,要求用负R进制显示. n∈[-32768,32767].R ∈[-20,-2] 考察的是负进制数的转换,需要理解短除法. 看到这道题的时候,我是比较蒙 ...
- 洛谷——P1017 进制转换
P1017 进制转换 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1\times ...
- 集训作业 洛谷P1017 进制转换
这个题的题目真的太恶心了. 重点是他的题目描述和他的目标没啥关系. 和最终目的有关系的只有这么一句话:”输出此负进制数及其基数,若此基数超过10,则参照16进制的方法处理.“ 我们通过看这句话可以发现 ...
- 洛谷 P1017 进制转换
推荐洛谷 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1*10^2+2*10^1+ ...
- luogu P1017 进制转换
感觉这个题 是真的恶心 本来单纯就递归写,发现好难 后来用数组记录 然后考虑 指数为 奇和偶数 分别 <0 和 > 进制的情况 其实 用进制数为3 大概讨论四种情况就可以了 由于最近就是在 ...
- [NOIP2000] 提高组 洛谷P1017 进制转换
题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1*10^2+2*10^1+3*10^ ...
- 洛谷—— P1017 进制转换
https://www.luogu.org/problem/show?pid=1017#sub 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1) ...
- P1017 进制转换
模拟水题,直接上代码 #include <bits/stdc++.h> using namespace std; const int maxn = 100000; int main() { ...
- P1017 进制转换 (负进制转换)
和平常的转化差不多 加多一步 如果余数 < 0, 那么余数减去除数(此时除数是负),商数加1 #include<cstdio> #define _for(i, a, b) for(i ...
随机推荐
- Github建站笔记
下载Git 搜索"Git",在官网中根据系统版本下载,并双击打开,按默认已勾选组件点下一步; 勾选在Windows命令行窗口中使用Git: 使用推荐的OpenSSL库用于HTTPS ...
- ScoutSuite:一款针对云集群环境的安全审计工具
工具介绍 Scout Suite是一款针对云集群环境的开源安全审计工具,主要针对的是云端环境的安全状况.通过使用云服务提供商暴露的API,Scout Suite可以从高安全风险区域收集配置数据以备研究 ...
- bash 特殊符号的含义
bash常见特殊符号及含义 linux中shell变量的含义解释
- Python 学习笔记20 自定义robot Framework 关键字
Robot Framework 自定义关键字 Robot framework 自定义了一些关键字我们可以把他们当作函数在设计测试用例的时候使用. 同时RF也提供了许多第三方的库,我们可以自己下载使用. ...
- [CodeForces 52C]Circular RMQ
题目传送门 评分:省选/NOI-,难度:普及+/提高 这题真的和RMQ没有半点关系,只需要一个裸的线段树,连pushdown都不需要,只需要两种操作:区间修改和区间求最小值,在回溯时加上标记即可,唯一 ...
- luoguP1081 开车旅行 题解(NOIP2012)
这道题是真滴火!(一晚上加一节信息课!) 先链接一下题目:luoguP1081 开车旅行 首先,这个预处理就极其变态,要与处理出每一个点往后走A会去哪里,B会去哪里.而且还必须O(nlogn)给它跑出 ...
- git stash 后"本地代码不见了"
git stash 当本地代码不想提交覆盖,又忙于其他分支,可以先储存起来. git stash命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈中的内 ...
- 上传.cgi在252板子上跑
1.windows下写好.c程序 2.进入linux,准备交叉编译 arm-hisiv600-linux-gcc -g -Wall -o xxx.cgi xxx.c(交叉编译工具取决于板子) 3.把. ...
- 关于GeneXus中的ForeachCommand命令
首先作为我们开发过程中必不可少的命令For Each 有着无与伦比的重要性 但是我们从Wiki上得知 我们用到的可能只是它一丢丢的能力并没有全部使用出来. 所以 这篇文档将记 ...
- Cent OS 7 VNC 安装
关闭防火墙 关闭selinux 挂载光盘到本地 #yum install tigervnc-server -y #cp /lib/systemd/system/vncserver@.service / ...