感觉这个题 是真的恶心

本来单纯就递归写,发现好难

后来用数组记录

然后考虑 指数为 奇和偶数 分别 <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 进制转换的更多相关文章

  1. 洛谷P1017 进制转换

    洛谷P1017 进制转换 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 \(1*10 ...

  2. 洛谷p1017 进制转换(2000noip提高组)

    洛谷P1017 进制转换 题意分析 给出一个数n,要求用负R进制显示. n∈[-32768,32767].R ∈[-20,-2] 考察的是负进制数的转换,需要理解短除法. 看到这道题的时候,我是比较蒙 ...

  3. 洛谷——P1017 进制转换

    P1017 进制转换 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1\times ...

  4. 集训作业 洛谷P1017 进制转换

    这个题的题目真的太恶心了. 重点是他的题目描述和他的目标没啥关系. 和最终目的有关系的只有这么一句话:”输出此负进制数及其基数,若此基数超过10,则参照16进制的方法处理.“ 我们通过看这句话可以发现 ...

  5. 洛谷—— P1017 进制转换

    https://www.luogu.org/problem/show?pid=1017#sub 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1) ...

  6. 洛谷 P1017 进制转换

    推荐洛谷 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1*10^2+2*10^1+ ...

  7. [NOIP2000] 提高组 洛谷P1017 进制转换

    题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1*10^2+2*10^1+3*10^ ...

  8. P1017 进制转换

    模拟水题,直接上代码 #include <bits/stdc++.h> using namespace std; const int maxn = 100000; int main() { ...

  9. P1017 进制转换 (负进制转换)

    和平常的转化差不多 加多一步 如果余数 < 0, 那么余数减去除数(此时除数是负),商数加1 #include<cstdio> #define _for(i, a, b) for(i ...

随机推荐

  1. Egret3D学习笔记一 (Unity插件使用)

    一 官方教程: http://developer.egret.com/cn/github/egret-docs/Engine3D/getStarted/getStarted/index.html 大部 ...

  2. go练习5--生成md5

    import "crypto/md5" import "encoding/hex" //go 生成 md5 func T4_1() { m := md5.New ...

  3. 使用SSH工具连接到MySQL

    在SSH中查看MySQL数据信息 格式为:mysql -h主机地址 -u用户名 -p用户密码 -P端口号 -D数据库名称 例如: mysql -uroot -p123456 -h192.168.1.1 ...

  4. angularJS的过滤器!

    angularJS过滤器: filter currency date filter json limitTo lowercase number orderBy uppercase ...... Fil ...

  5. 素数测试算法(基于Miller-Rabin的MC算法) // Fermat素数测试法

    在以往判断一个数n是不是素数时,我们都是采用i从2到sqrt(n)能否整除n.如果能整除,则n是合数;否则是素数.但是该算法的时间复杂度为O(sqrt(n)),当n较大时,时间性能很差,特别是在网络安 ...

  6. Visual Studio实用小技巧

    有一个有关微软Office的笑话,说的是它的特性太多: 当你觉得自己发现了一个Office的新特性时,它已经存在很多年了. 本文将介绍一些在Visual Studio(免费下载)中很实用却被忽略的小技 ...

  7. 01.MyBatis入门

        MyBatis入参考文档:http://mybatis.org/mybatis-3/zh/  1.使用MyBatis前的准备 1.增加Maven依赖 <dependency> &l ...

  8. 170621、springboot编程之全局异常捕获

    1.创建GlobalExceptionHandler.java,在类上注解@ControllerAdvice,在方法上注解@ExceptionHandler(value = Exception.cla ...

  9. 170505、MySQL的or/in/union与索引优化

    假设订单业务表结构为: order(oid, date, uid, status, money, time, …) 其中: oid,订单ID,主键 date,下单日期,有普通索引,管理后台经常按照da ...

  10. Flink简介及使用

    一.Flink概述 官网:https://flink.apache.org/ mapreduce-->maxcompute HBase-->部门 quickBI DataV Hive--& ...