进制转换

总体思路:当要求十进制x的k进制表示时,我们只需要不断重复地把x对k求余,再除以k,即可得到由低到高的各个位数上的数

                   当要求得由k进制表示得数字得十进制时,我们需要依次计算各个数位上的数字与该位权重的积(第n位的权重为k^(n-1)),

                   然后将它们依次累加即可得到该十进制值

题目描述

    求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。     不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。

输入描述:

    输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。
    数据可能存在包含前导零的情况。

输出描述:

    可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。
示例1

输入

15 Aab3 7

输出

210306
 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 int main()
 5 {
 6     int a,b,c;
 7     char str[40],ans[40];
 8     int i;
 9     int temp,len,index;
10     int x;
11 
12     while( scanf("%d%s%d",&a,str,&b)!=EOF)
13     {
14         len = strlen(str);
15         temp = 0;  //表示十进制数,初始化为0
16         index = 0;  //表示目标数组中的位置
17         for( i=0; i<len; i++)
18         {
19             //注意这里是从后往前循环
20             if( str[i]>='0' && str[i]<='9')
21                 x = str[i] - '0';
22             else if( str[i]>='a' && str[i]<='z')
23                 x = str[i] - 'a' + 10;
24             else if( str[i]>='A' && str[i]<='Z')
25                 x = str[i] - 'A' + 10;
26             temp = temp*a +x;
27         }
28         do
29         {
30             //即使转换数值为0也会执行一遍
31             x = temp%b;
32             if( x<10 )  ans[index++] = x + '0';
33             else ans[index++] = x-10 + 'A';
34             temp/=b;
35         }
36         while( temp);
37         for( i=index-1; i>=0; i--)
38         {
39             //输出时顺序从高位到低位
40             printf("%c",ans[i]);
41         }
42         printf("\n");
43     }
44     return 0;
45 }

 

posted @ 2018-02-10 11:44  yuxiaoba  阅读(238)  评论(0编辑  收藏  举报