例题(12.9) 数制转换

来源:互联网 发布:axure7 for mac 编辑:程序博客网 时间:2024/05/09 07:46
描述求任意两个不同进制非负整数的转换(2进制~36进制),所给整数在long所能表达的范围之内。 
不同进制的表示符号为(0,1,...,9,a,b,...,z)或者(0,1,...,9,A,B,...,Z)。
关于输入输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。 a,b是十进制整数,2 ≤ a,b < 36。
关于输出输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,Z)。
例子输入
15 Aab3 7
例子输出
210306
提示可以用字符串表示不同进制的整数
#include <stdio.h>char symbol[256];/* 数对应的符号 */int value[256];/* 符号代表的数 */void setup(){int j;for (j = 0; j < 10; ++j){symbol[j] = '0' + j;value['0' + j] = j;}for (j = 10; j < 36; ++j){symbol[j] = 'A' + j - 10;value['A' + j - 10] = j;value['a' + j - 10] = j;}}long from_base(char *n, int a){long x = 0;while (*n){x = a * x + value[*n];n++;}return x;}char *to_base(long x, char *s, int b){do{*(--s) = symbol[x%b];x = x / b;} while (x);return s;}int main(){int a = 0, b = 0;char n[256] = { 0 };long x = 0;char *p = 0;scanf("%d %s %d", &a, n, &b);setup();x = from_base(n, a);p = to_base(x, n + 255, b);printf("%s\n", p);return 0;}
0 0
原创粉丝点击