算法提高 P0102
时间限制:1.0s 内存限制:256.0MB
用户输入三个字符,每个字符取值范围是0-9,A-F。然后程序会把这三个字符转化为相应的十六进制整数,并分别以十六进制,十进制,八进制输出,十六进制表示成3位,八进制表示成4位,若不够前面补0。(不考虑输入不合法的情况)
输入
1D5
输出
(注意冒号后面有一个空格)
Hex: 0x1D5
Decimal: 469
Octal: 0725
输入
1D5
输出
(注意冒号后面有一个空格)
Hex: 0x1D5
Decimal: 469
Octal: 0725
这题的16进制输出……神经病啊= =
#include<bits/stdc++.h>
using namespace std;
void Arbitrary_change(int n,int m){
char s[100];
int i;
for(i=0;n>0;i++){
if(n%m<10){
s[i] = n%m+'0';
}else{
s[i] = n%m-10+'A';
}
n/=m;
}
if(m == 8){
printf("Octal: ");
int temp = i;
while(temp++<4){
printf("0");
}
}
else if(m == 16){
printf("Hex: 0x");
int temp = i;
while(temp++<3){
printf("0");
}
}
for(n=i;n>0;n--)
printf("%c",s[n-1]);
printf("
");
}
int Ten_change(int n,string str){
int ans = 0, sum = 1;
for(int i = str.length(); i > 0; i--){
if(str[i-1] >='A') ans = ans + (str[i - 1] - 'A'+10) * sum;
else ans = ans + (str[i - 1] - '0') * sum;
//cout<<ans<<endl;
sum *= n;
}
return ans;
//printf("%d
", ans);
}
int main()
{
string str;
cin>>str;
int ans2 = Ten_change(16,str);
Arbitrary_change(ans2,16);
cout<<"Decimal: "<<ans2<<endl;
Arbitrary_change(ans2,8);
return 0;
}