输入一个十六进制正整数s,将s转换成八进制数后输出。
输入格式:
只有一行且只有一个十六进制正整数:s
输出格式:
只有一行且只有一个转换后的八进制整数
输入样例:
3D59
输出样例:
36531
【数据规模】 30% 的数据: 1 <= s的长度 <= 10
70% 的数据: 1 <= s的长度 <= 100
100% 的数据: 1 <= s的长度 <= 10000
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
vector<int>v,arr[10001],array;
int main(){
string s;
cin>>s;
int i;
for(i=0;i<s.length();i++){
if(s[i]>='0' && s[i]<='9')
v.push_back(s[i]-'0');
else
v.push_back(s[i]-'A'+10);
}
for(i=0;i<v.size();i++){
int t=v[i];
while(t!=0){
arr[i].push_back(t%2);
t/=2;
}
int j;
for(j=arr[i].size();j<4;j++)
arr[i].push_back(0);
reverse(arr[i].begin(),arr[i].end());
}
string x;
for(i=0;i<v.size();i++){
int j;
for(j=0;j<arr[i].size();j++){
x+=(arr[i][j]+'0');
}
}
int n=x.length()%3;
for(i=x.length()-1;i>=n;i--){
array.push_back(x[i]-'0'+(x[i-1]-'0')*2+(x[i-2]-'0')*4);
i-=2;
}
if(n==1)
array.push_back(x[0]-'0');
else if(n==2)
array.push_back(x[1]-'0'+(x[0]-'0')*2);
reverse(array.begin(),array.end());
bool flag=false;
for(i=0;i<array.size();i++){
if(array[i]!=0 && !flag)
flag=true;
if(flag)
cout<<array[i];
}
return 0;
}