java N进制转换M进制_进制转换(将M进制的数X转换为N进制的数输出)

#include

#include

#include

#define LEN 2000

char str[LEN], another[LEN];

int ten[LEN];

int switchToTen();

void switchToAnother(int k, int n);

int main()

{

int m, n, k;

while (scanf("%d %d", &m, &n) != EOF) {

scanf("%s", str);

k = switchToTen(m);

switchToAnother(k, n);

}

return 0;

}

int switchToTen(int m)

{

int i, j, len, k, c;

//初始化

len = strlen(str);

k = 1;

memset(ten, 0, sizeof(ten));

//转换为10进制数

for (i = 0; i < len; i ++) {

for (j = 0; j < k; j ++) {

ten[j] *= m;

}

if (str[i] >= '0' && str[i] <= '9') {

ten[0] += str[i] - '0';

}else if (str[i] >= 'A' && str[i] <= 'Z') {

ten[0] += str[i] - 'A' + 10;

}else if (str[i] >= 'a' && str[i] <= 'z') {

ten[0] += str[i] - 'a' + 10;

}

for (j = c = 0; j < k; j ++) {

ten[j] += c;

if (ten[j] >= 10) {

c = ten[j] / 10;

ten[j] %= 10;

}else {

c = 0;

}

}

while (c) {

ten[k ++] = c % 10;

c /= 10;

}

}

//翻转数组

int temp;

for (i = 0, j = k - 1; i < j; i ++, j --) {

temp = ten[i];

ten[i] = ten[j];

ten[j] = temp;

}

return k;

}

void switchToAnother(int k, int n)

{

int sum, i, r, t, d;

sum = 1;

r = 0;

memset(another, 0, sizeof(another));

while (sum) {

sum = 0;

for (i = 0; i < k; i ++) {

d = ten[i] / n;

sum += d;

if (i == k - 1) {

t = ten[i] % n;

if (t >= 0 && t <= 9) {

another[r] = t + '0';

}else {

another[r] = t - 10 + 'a';

}

r ++;

}else {

ten[i + 1] += ten[i] % n * 10;

}

ten[i] = d;

}

}

//打印是输出

for (i = r - 1; i >= 0; i --) {

printf("%c", another[i]);

}

printf("\n");

}

/**************************************************************

Problem: 1080

User: wangzhengyi

Language: C

Result: Accepted

Time:170 ms

Memory:920 kb

****************************************************************/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值