求懂C++的大神用C++语言帮忙写个程序。在线等!急!!!!!! 5
描述将p进制n转换为q进制。p和q的取值范围为[2,36],其中,用到的数码按从小到大依次为:0,1,2,3,4,5,6,7,8,9,A,B,...,Z,不考虑小写字母。...
描述
将 p 进制 n 转换为 q 进制。p 和 q 的取值范围为[2,36],其中,用到的数码按从小到大依次为:0,1,2,3,4,5,6,7,8,9,A,B,...,Z,不考虑小写字母。
输入
一共1+m 行:
第1行为 m,表示后面有 m 行(1 <= m <= 60).
其后的m行中,每行3个数: 进制p,p进制数n,以及进制 q。
三个数之间用逗号间隔。
n 的长度不超过50位。
输出
转换后的 q 进制数。
样例输入
6
18,2345678A123,18
15,23456,18
12,2345678,20
16,12345678,23
25,3456AB,21
18,AB1234567,22
样例输出
2345678A123
114E0
22B7A4
21A976L
7C2136
22JF0G367 展开
将 p 进制 n 转换为 q 进制。p 和 q 的取值范围为[2,36],其中,用到的数码按从小到大依次为:0,1,2,3,4,5,6,7,8,9,A,B,...,Z,不考虑小写字母。
输入
一共1+m 行:
第1行为 m,表示后面有 m 行(1 <= m <= 60).
其后的m行中,每行3个数: 进制p,p进制数n,以及进制 q。
三个数之间用逗号间隔。
n 的长度不超过50位。
输出
转换后的 q 进制数。
样例输入
6
18,2345678A123,18
15,23456,18
12,2345678,20
16,12345678,23
25,3456AB,21
18,AB1234567,22
样例输出
2345678A123
114E0
22B7A4
21A976L
7C2136
22JF0G367 展开
1个回答
展开全部
给你一个参考,你可以自己改写:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define MAX_CONVERT_NUM_LEN 50
char m2n(char m, char n, char *mNum, char *nNum)
{
char *np=nNum;
char JINZHI[37] ="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
unsigned int dec;
char shang[MAX_CONVERT_NUM_LEN], tt[MAX_CONVERT_NUM_LEN];
char *sp, *tp;
char getm, temp;
if(m<2 || m>36 || n<2 || n>36)
return -1;
strcpy(shang, mNum);
sp = shang;
while(*sp != '\0'){
dec = 0;
*tt = '\0';
tp = tt;
while(*sp != '\0'){
getm = *sp > '9' ? (toupper(*sp++)-'A'+10) : ((*sp++)-'0');
if(getm < 0 || getm >= m )
return -1;
dec = dec * m + getm;
if((temp=dec/n) != 0 || *tp != '\0')
*tp++ = JINZHI[temp];
dec %= n;
}
*np++ = JINZHI[dec];
*tp = '\0';
strcpy(shang, tt);
sp = shang;
}
*np-- = '\0';
while(np>nNum){
temp =*np;
*np-- =*nNum;
*nNum++ = temp;
}
return 0;
}
int main(int argc, char **argv)
{
char *m="123004560007890000abcdEF";
char n[MAX_CONVERT_NUM_LEN];
if(strlen(m) > 0 && 0 == m2n(16, 10, m, n))
printf("%s \n",n);
else
printf("error!!!\n");
system("pause");
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询