任意进制转换成十进制/十进制转换成任意进制(ASCII码法)(C/C++)

之前写的C版本,最高只能转换成16进制,而且需要一个一个数字输入,缺点比较多

#include 
#include //这里用到指数函数,需要引用数学库
int main()
{
    char a[100],b[100],c[100];//a数组存储当前进制,b数组存储十进制数,c数组存储目标进制数,由于涉及到十进制以上数,所以需要通过字符和数字转换的方式进行存储(ASCII码)
    int count=0;//记录输入的位数
    int sum=0;
    int i,j,k,yushu,temp; 
    printf("您现有的进制数为多少进制:");
    scanf("%d",&k);
    printf("请依次输入每一位%d进制数(以#结束):\n",k);
    for(i=0;i<=9;i++)
    {
        scanf("%c",&a[i]);
        if(a[i]=='#')
        {
            break;
        }
        count++;
    }
    for(i=0;i<=9;i++)
    {
        if(a[i]=='A'||a[i]=='B'||a[i]=='C'||a[i]=='D'||a[i]=='E'||a[i]=='F')
        {
            b[i]=(int)a[i]-(int)'A'+10;//面对字母形式需要特殊处理,通过ASCII码的转换
        }
        else
        {
            b[i]=(int)a[i]-(int)'0';//数字形式的ASCII码的转换
        }
    }
    for(i=0;i0)
    {
        yushu=sum%j;//转换成其他进制需要用短除法(除以基数取余)
        sum=sum/j;//更新sum值,注意不要和上一步弄反
        if(yushu>=10)//对于字母的特殊处理
        {
            temp=yushu+(int)'A'-10;
            c[i]=(char)temp;
        }
        if(yushu<10)//对于数字的处理
        {
            temp=yushu+(int)'0';
            c[i]=(char)temp;
        }
        count++;
        i++;
    }
    printf("%d进制数为:",j);
    for(i=0;i

针对上面的问题进行改进(C++):

任意进制转换成十进制(运用字符串)

#include 
using namespace std;

string s;
int P;
int sum;
int main()
{
	cin>>s;
	cin>>P;
	int len=s.size();
	for(int i=0;i=65)
		{
			sum=sum+((int)s[i]-65+10)*pow(P,len-1-i);//A的ASCII码等于65
		}
		if((int)s[i]>=48&&(int)s[i]<=57)
		{
			sum=sum+((int)s[i]-48)*pow(P,len-1-i);//0的ASCII码等于48 
		}
	}
	cout<

十进制转换成任意进制(运用数组逆序存储+取模作除法)

#include
using namespace std;
long ten;	
int a[50];
int P,temp,q,k;
int main()
{ 	
    cin>>P;
    while(target!=0)
	{
		temp=target%P;//取模 
		target=target/P;//除法取整 
		k++;
		a[k]=temp;//存入数组,从a[1]开始存 
	}
	
	for(q=k;q>=1;q--)//倒序输出 
	{
		if(a[q]>=10)	
			cout<<(char)(a[q]+55);	
		else
			cout<

ASCII码参考

字符 ASCII值
0 48
9 57
A 65
a 97
本文用到A

你可能感兴趣的:(算法,蓝桥杯,职场和发展,c++,c语言)