【杭电】[2031]进制转换

这里写图片描述
这里写图片描述

进制转换问题
有点麻烦
主要是因为涉及到了超过10进制的数据
需要按照
10-A 11-B 12-C 13-D 14 E 15 F
这种来输出
不过掌握了用数组储存的基本思路
还是可以比较轻松解决的

#include<stdio.h>
#include<string.h>
int Rt(int a[],int N,int R) {
    int i;
    for(i=0; N>=R; i++) {
        a[i]=N%R;
        N=N/R;
    }
    a[i]=N;
    return i;
}
int main() {
    int x,i,j,N,R;
    int a[1000];
    char s[1000];
    while(scanf("%d %d",&N,&R)!=EOF) {
        memset(a,0,sizeof(a));
        memset(s,0,sizeof(s));
        if(N>=0)
            x=1;
        else {
            x=0;
            N=-N;
        }
        i=Rt(a,N,R);
        for(j=0; j<=i; j++) {
            if(a[i-j]==10)
                s[j]='A';
            else if(a[i-j]==11)
                s[j]='B';
            else if(a[i-j]==12)
                s[j]='C';
            else if(a[i-j]==13)
                s[j]='D';
            else if(a[i-j]==14)
                s[j]='E';
            else if(a[i-j]==15)
                s[j]='F';
            else {
                s[j]=a[i-j]+'0';
            }
        }
        if(x==0)
            printf("-");
        printf("%s\n",s);
    }
    return 0;
}

======20160531补充=============
使用递归方式解决
除k取余倒序输出的过程
(递归函数的机制是优先运行完内嵌)
(也就是深度优先)
再加上用字符数组来保存对应关系
可以使代码非常简洁

#include<stdio.h>
#include<string.h>
char mi[]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
void f(int m,int k) {
    if(m<k) {
        printf("%c",mi[m]);
        return ;
    } else {
        f(m/k,k);
        printf("%c",mi[m%k]);
    }
}
int main() {
    int n,R;
    while(scanf("%d %d",&n,&R)!=EOF) {
        if(n<0) {
            printf("-");
            n=-n;
        }
        f(n,R);
        printf("\n");
    }
    return 0;
}

题目地址:【杭电】[2031]进制转换

原文地址:https://www.cnblogs.com/BoilTask/p/12570091.html