负进制转换

来源:互联网 发布:三维动画软件图标 编辑:程序博客网 时间:2024/06/10 11:46

1105: 坑爹的进制转换

描述

题目描述:

以前我们做的进制转换大家都忽略了一点,就是进制一定是正整数;今天这道进制转换就坑爹的选择了,额,负整数来做进制。

输入:

输入由若干行组成,每行有两个整数n(-32765<=n<=32767)和R(-16<=R<=-2)。输入的最后一行只有一个‘#’号,表示输入结束。

输出:

对于每个输入行,输出n的R进制形式。出现的字母请用大写字母表示!

样例输入
30000 -2
-20000 -2
28800 -16
-25000 -16
#
样例输出
11011010101110000
1111011000100000
19180

7FB8

不管正负,都采用短除法求进制后的数~~

只是当数字为负时,注意余数可能为负,所以这时候商要+1.。

为什么呢?

自己体会一下这个公式:除数*商+余数=被除数

例如 -15 % -2

商为7时余数时-1

所以商要加1,变为8

当然余数就变为1了,总之要保证余数不能为负

还有就是当转化为-16进制时候注意10以上要用字母表示了。

贴代码体会:

#include<bits/stdc++.h>using namespace std;char a[6]={'A','B','C','D','E','F'};void f(int n,int x){if(n!=0){int q,r;q = n/x;//商 r = n%x;//余数if(r < 0){while(r < 0){q ++;r = n - q*x;}}f(q,x);if(r <= 9)cout<<r;else{cout<<a[r-10];}}}int main(){int n,x;char c;while(cin>>n&&cin>>x&&!cin.fail()){if(n == 0 || x == 0)cout<<0;elsef(n,x);cout<<endl;}return 0;} 



原创粉丝点击