感觉这个题 是真的恶心

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

后来用数组记录

然后考虑 指数为 奇和偶数 分别 <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. Android 查看每个应用的最大可用内存

    http://blog.csdn.net/vshuang/article/details/39647167    Android 内存管理 &Memory Leak & OOM 分析 ...

  2. PHP内存缓存功能memcached

    PHP内存缓存功能memcached: http://blog.csdn.net/fangaoxin/article/details/6223383

  3. 9.Node.js 包管理器npm

    npm 是 Node.js  官方提供的包管理工具, 用于 Node.js包的发布.传播.依赖控制 安装 express ==> 流行的基于Node.js的Web开发框架,可以快速地搭建一个完整 ...

  4. jfinal关联查询给dto添加表结构以外的字段并返回的处理方式

    官网栗子: http://www.jfinal.com/doc/5-10 5.10 表关联操作 JFinal ActiveRecord 天然支持表关联操作,并不需要学习新的东西,此为无招胜有招.表关联 ...

  5. 无法远程访问Mysql

    1.故障状态 [root@server02 ~]# mysql -utuser -h192. -p Enter password: ERROR (HY000): Can't connect to My ...

  6. 解读 Android TTS 语音合成播报

    随着从事 Android 开发年限增加,负责的工作项目也从应用层开发逐步过渡到 Android Framework 层开发.虽然一开始就知道 Android 知识体系的庞大,但是当你逐渐从 Appli ...

  7. 310实验室(六)CMake学习心得

    树形结构方式布局. OTL 中每一个文件中的CMakeLists.txt 有不同的作用:按查看文件的先后顺便进行分层理解, 根文件即第一次 中的.txt是 启用 CMAKE_MODULE_PATH模板 ...

  8. Vue 学习顺序

    起步: 1.扎实的 JavaScript / HTML / CSS 基本功,ES6 最好过一遍 2.通读官方教程 (guide) 的基础篇.不要用任何构建工具,就只用最简单的 <script&g ...

  9. 【node】------websocket------【巷子】

    001.学习地址 https://github.com/websockets/ws 002.server.js //引入ws第三方模块 const WebSocket = require('ws'); ...

  10. (转)大数据量下的SQL Server数据库优化

     在SQL Server中,默认MDF文件初始大小为5MB,自增为1MB,不限增长,LDF初始为1MB,增长为10%,限制文件增长到一定的数目:一般设计中,使用SQL自带的设计即可,但是大型数据库设计 ...