luogu P1017 进制转换
感觉这个题 是真的恶心
本来单纯就递归写,发现好难
后来用数组记录
然后考虑 指数为 奇和偶数 分别 <0 和 > 进制的情况
其实 用进制数为3 大概讨论四种情况就可以了
由于最近就是在划水,就随便写了写代码 也没好好修改,大概过了
#include<bits/stdc++.h>
using namespace std;
int s[]; int f(int n,int k)
{
int t =;
while (n)
{
s[t++] = n%k;
n/=k;
}
return t;
} int main ()
{
memset(s,,sizeof(s));
int n,t;
cin>> n >>t;
cout<<n<<"=";
int len = f(n,t);
for(int i=;i<len;i++)
{
if(i& && s[i] < )
{
if(i+ >=len)
{
len = i+;
}
s[i] -= t;
s[i+]+=;
}
if(i& && s[i] >= -t )
{
if(i+ >= len)
{
len = i+;
}
s[i+] += ;
s[i+] += ;
s[i] += t;
}
if(i%== && s[i] < )
{
if(i+>=len)
len = i+;
s[i+] +=;
s[i] -= t;
}
if(i%== && s[i] >= -t)
{
s[i] += t;
if(i+ >= len)
len= i+;
s[i+] -= ;
}
}
for(int i=len-;i>=;i--)
{
if(s[i] >= )
printf("%c",s[i]- +'A');
else
cout<<s[i];
} printf("(base%d)\n",t);
return ;
}
后来看别人的题解 发现自己真的是弱智
百度一波负进制数:和正进制一样,每次取的余数保证在0~m-1之间。
(例如m=-16,则余数应该在0~15就可以直接输出)
所以用系统的“%”运算符的时候必须注意检查是不是在该范围(可能在m+1~0),否则就调整。
调整的方法是:如果余数<0,那么:余数-=m;商++;
就很简单的一种情况 被我讨论了... 四种情况 GG 我是sb
#include <bits/stdc++.h>
using namespace std; int main()
{
//freopen("input.txt","r",stdin);
char js[]="0123456789ABCDEFGHIJ";//常量数组保存对应基数,常量大法吼啊
int n,r;
scanf("%d%d",&n,&r);
printf("%d=",n);//提前输出n,因为后面n变化了,如果想在后面输出,就要多加一个变量保存n
stack<int>s;//用栈来保存倒序的结果,便于输出
while(n){
int a=n%r;
n/=r;
if(a<) {a-=r;n++;}//如果余数为负数,余数减去进制数,商加1
s.push(a);//结果进栈
}
while(!s.empty()){//输出结果
printf("%c",js[s.top()]);
s.pop();
}
printf("(base%d)\n",r);
return ;
}
luogu 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 进制转换
https://www.luogu.org/problem/show?pid=1017#sub 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1) ...
- 洛谷 P1017 进制转换
推荐洛谷 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1*10^2+2*10^1+ ...
- [NOIP2000] 提高组 洛谷P1017 进制转换
题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1*10^2+2*10^1+3*10^ ...
- 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 ...
随机推荐
- C#的命令行工具
在最开始学java的时候我们一般用 记事本 + 命令行,在命令行里边进行编译和运行, C#也有类似的东西(csc工具),在学习C#语言的时候可以用 文本编辑器来编写代码,然后用C#的命令行工具来编译 ...
- 【BZOJ2938】[Poi2000]病毒 AC自动机+DFS
[BZOJ2938][Poi2000]病毒 Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码 ...
- 三维凸包求重心到面的最短距离(HDU4273)
http://acm.hdu.edu.cn/showproblem.php?pid=4273 Rescue Time Limit: 2000/1000 MS (Java/Others) Memo ...
- Java.lang的研究(分析包含的重要类和接口)
Java.lang包是Java中使用最广泛的一个包,它包含很多定义的类和接口. java.lang包包括以下这些类: Boolean Byte Character Class ClassLoader ...
- 【Object.prototype.toString.call()】---判断某个对象属于哪种内置类型------【巷子】
预热:目前我们知道区分对象类型的方式有三种 :type instanceof Object.prototype.toString.call. 那么这三种的区别是什么呢? type 在 Java ...
- jquery 实现点击按钮后出现倒计时效果(用于实现发送手机验证码、邮箱验证码)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- With all Java versions it is strongly recommended to not use experimental -XX JVM options.
https://lucene.apache.org/solr/7_6_0//SYSTEM_REQUIREMENTS.html System Requirements Apache Solr runs ...
- javascript 知道这20个正则表达式,能让你少写1,000行代码
正则表达式,一个十分古老而又强大的文本处理工具,仅仅用一段非常简短的表达式语句,便能够快速实现一个非常复杂的业务逻辑.熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升. 正则表达式经常被用于 ...
- 修改hosts搭建本地站点
想要搭建本地站点.例如想要将www.nbb.com映射到本地服务器,而不是网络的.需要修改hosts文件 1 打开hosts所在目录 C:\Windows\System32\drivers\etc ...
- python模拟websocket握手过程中计算sec-websocket-accept
背景 以前,很多网站使用轮询实现推送技术.轮询是在特定的的时间间隔(比如1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给浏览器.轮询的缺点很明显,浏览器需要不断的向服 ...