算法提高 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 }

浙公网安备 33010602011771号