【阿杰程序3】十六以内的进制转换(含十六)
现在看就不是很难了
但是确实是刚入门阶段遇到的的难题
失误较多 花了很多时间修改矫正写出的答案
对基础的巩固很有帮助
//输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。
//a,b是十进制整数,2 =< a,b <= 16。
//Sample Input:15 Aab3 7
//输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,…,9,A
//,B,…,F)。
//Sample Output:210306
#include<iostream>
#include<cmath>
#include<stdio.h>
#include<math.h>
using namespace std;
long fun(char t)
{
switch(t)
{
case '0':return 0;
case '1':return 1;
case '2':return 2;
case '3':return 3;
case '4':return 4;
case '5':return 5;
case '6':return 6;
case '7':return 7;
case '8':return 8;
case '9':return 9;
case 'A':
case 'a':return 10;
case 'B':
case 'b':return 11;
case 'C':
case 'c':return 12;
case 'D':
case 'd':return 13;
case 'E':
case 'e':return 14;
case 'F':
case 'f':return 15;
}
}
int main()
{
char ch;
long a,b,i,sum=0,ace[100000],t;
while(cin>>a)
{
bool pen=false;
getchar();
i=0;
while((ch=getchar())!=' ')
{
i++;
ace[i]=fun(ch);
}
if(ace[1]==0)
pen=true;
t=i;
for(;i;i--)
sum+=ace[t-i+1]*pow((double)a,i-1);
cin>>b;
while(sum)
{
i++;
ace[i]=sum%b;
sum/=b;
}
if(pen==true)
{
i=1;
ace[1]=0;
}
for(;i>=1;i--)
{
if(ace[i]<10)
cout<<ace[i];
switch(ace[i])
{
case 10:cout<<"A";break;
case 11:cout<<"B";break;
case 12:cout<<"C";break;
case 13:cout<<"D";break;
case 14:cout<<"E";break;
case 15:cout<<"F";break;
}
}
cout<<endl;
}
return 0;
}