进制转化(c++)
#include <cstdlib>
int a=strtol(str,&stop,8); //8进制转为10进制
itoa(num,str,16); //10进制转为16进制 str
问题:输入一个9进制数字串,将其转化为19进制并输出,依次使用a..i,标识数字10..18,例如输入40,输出1h
分析:
1,先把9进制转为10进制
40(9)=4*9+0*1=36
2,把十进制转为19进制
17=36%19;1=36/19;1=1%19;
3,把9进制转为10进制,所需函数,f(n),统计位数,f2(p,t),计算t的p次方
代码:
int f2(int p,int t){
int sum=1,i;
for(i=0;i<p;i++){
sum*=t;
}
return sum;
}
int f(int n){
int count=0;
while(1){
if(n==0){
break;
}
n=n/10;
count++;
}
return count;
}
main(){
int n,i,b,j;
scanf("%d",&n);
int p=f(n);
int shi=0,c;
c=p;
//printf("%d",p);
for(i=0;i<c;i++){
b=n/f2(--p,10);
shi+=b*f2(p,9);
//printf("%d",shi);
n=n-b*f2(p,10);
}
printf("%d\n",shi);
//十进制转19进制
char a[10];
i=0;
while(1){
int c=shi%19;
shi=shi/19;
a[i]=c;
i++;
if(shi==0){
break;
}
}
for(j=i-1;j>=0;j--){
if(a[j]>=10){
switch(a[j]){
case 10:puts("a"); break;
case 11:puts("b"); break;
case 12:puts("c"); break;
case 13:puts("d"); break;
case 14:puts("e");break;
case 15:puts("f");break;
case 16:puts("g");break;
case 17:puts("h");break;
case 18:puts("i");break;
}
}else{
printf("%d",a[j]);
}
}
}
结果: