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