杭电2031 http://acm.hdu.edu.cn/showproblem.php?pid=2031
题目大意:
任给十进制数字转换为任意进制。
基本方法就是除K取余法
但是需要注意有负数的存在,我们可以用一个bool类型的f记录是否为负数,若为负数即f为true,且把n=-n再进行后续操作。
同时由于存在>=10的数字要依次对应字母。
所以需要a[i]=(char) num - '10' + 'A';
AC代码:
#include <iostream>
using namespace std;
int i,n,r,num;
bool f;
char a[400];
int main() {
while(cin>>n>>r) {
i=0;
f=false;
if(n<0) {
f=true;
n=-n;
}
else f=false;
while(n) {
num=n%r;
if(num>=10) a[i] =(char) num - 10 + 'A'; //字母输出
else a[i] =num+'0';
i++;
n/=r;
}
if(f) cout<<"-"; //打印负号
for(i--;i>=0;i--) {
cout<<a[i];
} cout<<endl;
}
return 0;
}