算法提高 P0102

用户输入三个字符,每个字符取值范围是0-9,A-F。然后程序会把这三个字符转化为相应的十六进制整数,并分别以十六进制,十进制,八进制输出,十六进制表示成3位,八进制表示成4位,若不够前面补0。(不考虑输入不合法的情况)
输入
  1D5
输出
(注意冒号后面有一个空格)
  Hex: 0x1D5
  Decimal: 469
  Octal: 0725

 

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cmath>
 5 #include <stack> 
 6 #include <queue>
 7 using namespace std;
 8 int change(char x)
 9 {
10     if(x>='0'&&x<='9') return x-'0';
11     else if(x>='A'&&x<='F') return x-'A'+10;
12 }
13 void test1(string s)
14 {
15     cout<<"Hex: 0x"<<s<<endl;
16 }
17 void test2(int sum)
18 {
19     cout<<"Decimal: "<<sum<<endl;
20 }
21 void test3(int sum)
22 {
23     int a[5],i=0;
24     while(sum>=8){
25         a[i++]=sum%8;
26         sum/=8;
27     }
28     a[i++]=sum%8;
29     int n=0;
30     for(int j=0;j<i;j++){
31         if(j==0)n+=a[j];
32         else if(j==1) n+=a[j]*10;
33         else if(j==2) n+=a[j]*100;
34         else if(j==3) n+=a[j]*1000;
35     }
36     printf("Octal: %04d\n",n);
37 }
38 int main()
39 {
40     string s;
41     while(cin>>s){
42         int sum=0;
43         sum=change(s[0])*16*16+change(s[1])*16+change(s[2]);
44         test1(s);
45         test2(sum);
46         test3(sum);
47     }
48     return 0;
49 }

 

posted @ 2019-02-27 22:14  wydxry  阅读(388)  评论(0)    收藏  举报
Live2D