工学1号馆

home

谈谈进制转换

Wu Yudong    November 25, 2016     Algorithm   692   

今天在微信上有同学要我写一篇关于进制转换(十进制转二进制)方面的文章,进制转换是基础的算法设计,于是花几分钟写了一个相对简单的版本,代码如下:

#include <stdio.h>
int a[1000]; //存储结果

//十进制转换成二进制
void dtob(long long n) {
    int i, r;
    i = 0;
    do {
        r = n % 2;
        n = n / 2;
        a[i++] = r;
    } while(n);
    while(i) printf("%d", a[--i]); //逆向打印保存的结果
    printf("\n");
}

int main(int argc,char *argv[])
{
    long long n;
    while(scanf("%lld", &n) != EOF)
        dtob(n);
    return 0;
}

上面的代码能不能转换成其它进制,比如8,16等常用进制,最好写成一个通用的函数,代码如下:

#include <stdio.h>
char a[1000]; //存储结果

//将十进制的正整数n转换成base进制
void decimal(long long n, int base)
{
    int r, i=0;
    char c;
    do {
        r = n % base;
        c = r < 10 ? (r + '0') : ('a' + r - 10);
        a[i++] = c;
        n = n / base;
    } while (n);
    while (i) printf("%c", a[--i]);    //逆向打印保存的结果
    printf("\n");

}

int main(int argc,char *argv[])
{
    long long n;
    int base;
    printf("请输入正整数与基底:");
    while(scanf("%lld %d", &n, &base) != EOF) {
        printf("%lld转换成%d进制后结果为:", n, base);
        decimal(n, base);
        printf("请输入正整数与基底:");
    }
    return 0;
}

如果文章对您有帮助,欢迎点击下方按钮打赏作者

Comments

No comments yet.
To verify that you are human, please fill in "七"(required)