思路
1-10进制一组 11-16一组
要注意数字小于零时 求余数时余数都为负数 所以在开始时就要把它
化为正数 最后再输出负号
#include<iostream>
#include<algorithm>
#include<string>
#include<cctype>
using namespace std;
int main()
{
int num, r, t,i,flag;
while (scanf("%d",&num)!=EOF)
{
cin >> r;
getchar();
if (num < 0)
{
flag = 0;
num = -num;
}
if (r <=10)
{
int a[50];
int k = 0;
for (i = 0; num != 0; i++)
{
t = num%r;
num = num / r;
a[i] = t;
k++;
}
a[i + 1] = num / t; //不要漏掉最后一位余数
if (flag == 0)
cout << "-";
for (i = k - 1; i >= 0; i--)
{
cout << a[i];
if (i == 0)
cout << endl;
}
flag = 1;
}
else
{
int a[50];
int k = 0;
for (i = 0; num != 0; i++)
{
t = num%r;
num = num / r;
a[i] = t;
k++;
}
a[i + 1] = num / t;
if (flag == 0)
cout << "-";
for (i = k - 1; i >= 0; i--)
{
if(a[i]<10)
cout << a[i];
if (a[i] >= 10)
{
switch (a[i])
{
case 10:cout << "A"; break;
case 11:cout << "B"; break;
case 12:cout << "C"; break;
case 13:cout << "D"; break;
case 14:cout << "E"; break;
case 15:cout << "F"; break;
}
}
if (i == 0)
cout << endl;
}
flag = 1;
}
}
}