如何利用C++互相转换10(0~9)进制和36进制(0~9,A~Z)?请给出代码。

如题所述

#include<iostream.h>
#include<string.h>
#include<math.h>
#include<stdio.h>
#include <stdlib.h>

char exchange(int s)//将十进制转换成的36进制对应的数字换成字母
{
char ch;
if(s>9)//将大于10的数字换成相应的字母
ch=char('a'+s-10);
else ch = char(s+'0');//小于10的数字保持不变
return ch;
}
int exchangealph(char s)//将36进制对应的字母转换成数字,然后进行运算
{
if(s>='a' && s <='z')
return int(s-'a'+10);
else return int(s-'0');
}
void main()
{
while(1)//大循环体,使程序可以一直处于等待输入状态,可以去掉
{
int a,b=0;
char num[128]="/0";
cout<<"输入进制和数字,以空格隔开"<<endl;
cin>>a>>num;
b=atoi(num);//将输入的字符转换成数字,主要用于10进制转换36进制时使用
if(a==10)//十进制转换36进制
{
char backnumber[128]="0/";
int number =0;
while(1)
{
if(b<36)//判断输入数据是否大于36
{
char temp1;
temp1= exchange(b);
backnumber[number]=temp1;
for(int i =0;i< (number+1)/2;i++)
{
int temp = backnumber[i];
backnumber[i]=backnumber[number-i];
backnumber[number-i]=temp;
}
break;
}
int temp =0,remainder=0;
temp = int(b/36);
remainder=b%36;
b=temp;
char temp1;
temp1= exchange(remainder);
backnumber[number]=temp1;
number++;

}
cout<<"输入的10进制数"<<num<<",转换为36进制为"<<backnumber<<endl;
}
else if(a==36)//36进制转换为十进制
{
int stl = strlen(num);//输入数据是几位数
int backnumber=0;
int temp2=0;
for(int i=0;i<stl;i++)
{
temp2 =exchangealph(num[i]);
backnumber += int(temp2*pow(36,stl-1-i));
}
cout<<"输入的36进制数为:"<<num<<",转换为10进制为"<<backnumber<<endl;

}
else
cout<<"请检查输入的进制数是否正确!!!";
cout<<endl;

}
}
//整体思路是十进制转换为36进制时,将十进制数除以36,余数放在最末位,让后将商再除以36,余数放到倒数第二位,直到商小于
//36为止
//36转换为十进制思路为从右往左依次是36的0次方,1次方,2次方,将每位上的数字转换为十进制数在对应的36的n次方相乘再相加即可
温馨提示:内容为网友见解,仅供参考
无其他回答

如何利用C++互相转换10(0~9)进制和36进制(0~9,A~Z)?请给出代码。
cout<<"输入的10进制数"<<num<<",转换为36进制为"<<backnumber<<endl;} else if(a==36)\/\/36进制转换为十进制 { int stl = strlen(num);\/\/输入数据是几位数 int backnumber=0;int temp2=0;for(int i=0;i<stl;i++){ temp2 =exchangealph(num[i]);backnumber += int(temp2*...

~C++设计一个程序输入一个十进制数输出相应的十六进制数设计一个函数...
代码文本:char d[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};void convertDecimal2Hex(int num, char* szHex){ szHex[0]=d[(unsigned)(num&0x0000000F)]; szHex[1]=d[(unsigned)(num&0x000000F0>>1*4)]; szHex[2]=d[(...

...C++进制转换器:十进制→二、八、十六进制,二进制→八、十、十六进 ...
void main(){ char aaa[5];unsigned char bbb, ccc, i, k, Err = 0;long unsigned int nnn = 0;printf(" \\n请输入数字 (0~9, A~Z): "); gets(aaa);printf(" \\n 当前进制 (2~36): "); scanf("%d", &bbb);for (i = 0; i < strlen(aaa); i++) { if (aaa...

...C++类,用于实现10进制数与N进制数之间的相互转换,N为2-36当某位上...
void dton(int n); \/\/10进制(d)->n进制(s)};void Convert::ntod(int n){ if(n<2 || n>36){ cout <<"Error!\\n";exit(1);} int i,len=0,t;long m=1;char ch;while(s[len]) len++;d=0;for(i=len-1; i>=0; i--){ ch=s[i];t=ch<'A' ? ch-'0' : ch-...

c++不用数组怎么将n进制转换成十进制?
c++不用数组将n进制转换成十进制,可以采取,每次读取一个字符的方法,然后把这个字符转换为数值,再采用秦九韶算法,读完所有的字符,就可以转换为十进制数字了。

c++ 十进制转三进制?
include <stdio.h> include <string.h> \/\/ 将十进制数dnum转换为k进制串,并返回 char *D2K(int dnum, int k, char *kstring) { int i,j,t,sign = 0;if(k < 2 || k > 36) { printf("仅支持 2 到 36 进制之间的转换。\\n");strcpy(kstring,"*** 无效转换 ***\\n");ret...

C++十进制转二进制,十六进制转十进制
void hexToDec(char *a, long &x){ x = strtol(a, (char**)NULL, 16);} int main(){ long x;char temp[255];cout << "输入一个十进制数: ";cin >> x;decToBin(x, temp);cout << "转换成二进制为: " << temp << endl;cout << "输入一个十六进制数: ";cin >> temp;...

用c++编译2.8.10.16进制间的相互转换,必须使用数组
int i,j,k,t,r,l,a[100],b[100];char v[128],s[100];\/ 支持2~Z 最大36进制的转换 \/ int main(){ for(i=0;i<10;i++){ \/\/预处理,1~9 字符与数字间的转换 v[i]='0'+i;v['0'+i]=i;} for(i=0;i<26;i++){ \/\/同上,A~Z 字符与数字间的转换 v[10...

C语言不同进制加和,看下这代码哪错了。。
if('0'<=ch && ch <='9')return ch - '0';else if('A'<=ch && ch<='Z')return ch - 'A' + 10;else return ch - 'a' + 36;} \/\/ 将 base 进制的字符串数字 num ,转换成 10 进制的数字并返回 int transToBase10(char num[],int base){ int result=0;int i,b;for...

在C++的MFC的环境下,如何定义一个十六进制数
返回转换后的整型数。附加说明 atoi()与使用strtol(nptr,(char**)NULL,10);结果相同。范例 \/* 将字符串a 与字符串b转换成数字后相加*\/ include<stdlib.h> mian(){ char a[]=”-100”;char b[]=”456”;int c;c=atoi(a)+atoi(b);printf(c=%d\\n”,c);} 执行 c=356 atol(将...

相似回答