进制转换

来源:互联网 发布:ndcg java 编辑:程序博客网 时间:2024/05/29 03:45

Think:
思路就是 不断的 递归 整除 取余 运算;
输入时 判断 N == 0 N < 0 N > 0三种情况
然后递归 输出就可以了!!! 记住 else else else
刚刚开始忘记判断N == 0的情况 WA 了好多发
然后 又忘记了 else 然后 就OT了 ~~~~~

Problem Description
输入一个十进制数N,将它转换成R进制数输出。
Input
输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R != 10)。
Output
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。
Example Input

7 2
23 12
-4 3

Example Output

111
1B
-11

#include<bits/stdc++.h>using namespace std;int num[50];int cnt;void change(int a, int b){    if (a == 0)  return;    change(a / b, b);    num[cnt ++] = a % b;}int main(){    int N, R;    int i;    while(cin >> N >> R)    {        cnt = 0;        memset(num, 0, sizeof(num));        if (N == 0)            printf("0");        else if (N < 0)        {            N =  - N;            printf("-");            change(N, R);        }        else if (N > 0)        {            change(N, R);        }        for (i = 0; i <= cnt - 1; i ++)        {            if (num[i] < 10)                printf("%d",num[i]);            else                printf("%c",num[i] - 10 + 'A');        }        printf("\n");    }}