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

杭电oj编码2031

2016-10-26 15:01 162 查看
问题描述:

输入一个十进制数N,将它转换成R进制数输出。

输入:

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

输出:

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

样例输入:

7 2

23 12

-4 3

样例输出:

111

1B

-11

分析:

这道题需要用到从10进制转换成其他进制的方法。

1、使用整型数组存储,包括(10,11,12,13,114,15)

2、将负数转化为正数做处理。

3、倒序输出

代码:

#include<iostream>
#include<stdio.h>
#include<cmath>
int main()
{
int N, R;
while (~scanf("%d %d", &N, &R))
{
int num, i = 0, c[100000];
for (int num = abs(N); num != 0; ++i)//使用abs函数,用于取得数的绝对值
{
c[i] = num % R;//将余数保存在整形数组中
num /= R;//将上次循环中的数据取整,并保留,用做下次循环时使用
}
if (N < 0)//当输入的数是负数时,需要输出负号
printf("-");
for (int j = i - 1; j >= 0; --j)//因为整型数组中存储的余数中可能会有‘10’,‘11’,‘12’,‘13’,‘14’,‘15’,将其转换成对应的字符。
{
if (c[j] == 10)
printf("A");
else if (c[j] == 11)
printf("B");
else if (c[j] == 12)
printf("C");
else if (c[j] == 13)
printf("D");
else if (c[j] == 14)
printf("E");
else if (c[j] == 15)
printf("F");
else
printf("%d", c[j]);
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  杭电 C++编程 编码