您的位置:首页 > 编程语言 > C语言/C++

hdu ---2031做题笔记(c++)

2016-10-13 11:49 239 查看

进制转换

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 42122    Accepted Submission(s): 23085


[align=left]Problem Description[/align]
输入一个十进制数N,将它转换成R进制数输出。
 

[align=left]Input[/align]
输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。

 

[align=left]Output[/align]
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。
 

[align=left]Sample Input[/align]

7 2
23 12
-4 3

 

[align=left]Sample Output[/align]

111
1B
-11

 

[align=left]Author[/align]
lcy

进制转换

#include <iostream>
using namespace std;
void detom(int a, int*ma, int m)//进制转换函数(a为输入的数,m为进制位,ma[]储存转换后的值)
{
int i = 0;
while (a)
{
ma[i++] = a%m;
a /= m;
}
}
int main()
{
int n, r,i; int ma[40];
while (cin >> n >> r)
{
int flag = 0;
memset(ma, 0, sizeof(ma));//因为int型无法用strlen,所以只能用填充0来确定数组经过运算后的实际长度
        if (n < 0)
{
flag = 1;
n *= -1;
}
detom(n, ma, r);
i = 39;
while (ma[i] == 0) i--;
if (i < 0) cout << endl;
else
{
if (flag)
cout << "-";
while (i >= 0)
{
if (ma[i] < 10)
{
cout << ma[i];
}
else
{
cout << (char)(ma[i] - 10 + 'A');

}
i--;

}
cout << endl;
}

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: