感觉这个题 是真的恶心

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

后来用数组记录

然后考虑 指数为 奇和偶数 分别 <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. 标准web浏览器的组件

    浏览器基本上包括如下几个组件 1.HTML.XML.CSS.JavsScript解析器 2.Layout 3.文字和图形渲染 4.图像解码 5.GPU交互 6.网络访问 7.硬件加速

  2. 【Android N 7.1.1】 ActivityManagerService 获取cpu状态

    void updateCpuStatsNow() { synchronized (mProcessCpuTracker) { mProcessCpuMutexFree.set(false); fina ...

  3. kubernetes 创建tomcat 容器

    方案一: 使用k8s dashboard 创建rc 1.  界面操作 提示:暂时 忽略 查看: 2.测试 由于是外部服务 直接用  节点的ip访问: 同样也是   第二个端口可以访问.感觉 跟之前的提 ...

  4. IIS7的HTTP到HTTPS的重定向

    方法一设置IIS 从HTTP到HTTPS的IIS7中的所有流量重定向,将确保用户始终安全地访问该网站.有许多不同的方法来设置一个IIS7从HTTP重定向到HTTPS和一些比别人更好.理想的HTTP到H ...

  5. Extjs4常见的调试问题

    Extjs4常见的调试问题: 1.fireFn.apply of undefined方法名称对不上 2.新增页面居左解决:页面的宽度和高度需要调整,内容items有问题:或者:layout : 'co ...

  6. ionic开发过程中遇到的一些坑!

    总结一些:在使用 ionic 开发过程中所遇到的问题. 问题一:Cannot find module '@ionic/app-scripts' 描述:使用 ionic start 项目的时候,项目安装 ...

  7. HOJ 1936&POJ 2955 Brackets(区间DP)

    Brackets My Tags (Edit) Source : Stanford ACM Programming Contest 2004 Time limit : 1 sec Memory lim ...

  8. MAC OSX

    你可以输入下面的命令来查看IPv4端口:(最好加 sudo) # lsof -Pnl +M -i4

  9. Java字符编码问题

    今天研究了一下,记录下来 中间用的是redis,可以使用任意其他的io替代,一样的 Test1 String s1 = "我要测试"; String s2 = "I wa ...

  10. python re.sub 括号匹配替换匹配到的内容后接数字

    如果代码为: text = re.sub(r'(?<=[{])([a-z]+)6(?=[}])', r'\13', text) 上面代码会报错,因为没有组合13,所以不能获得组合13的内容. 但 ...