#十六进制转二进制,二进制再转八进制,在东方博宜 1295https://oj.czos.cn/p/1295上无法通过,请在我原来代码的基础上修改。
1295 - 十六进制转换
题目描述
输入一个不超过 100000 位的十六进制数,请转换成八进制数。
注:十六进制数中,字符 0-9 还对应表示数字 0-9,字母 A(大写)表示 10,B 表示11,…,F表示15。
比如:十六进制A10B表示的10进制数是:
10*16^3+1 *16^2+0 *16^1+11 * 16^0=41227
转换成八进制数是:120413,因为1 8^5+2 8^4+0 8^3+4 8^2+1* 8^1+3* 8^0=41227
输入
一个十六进制数,没有前导 0 。
输出
一个八进制数,没有前导 0 。
样例
输入
123ABC
输出
4435274
#include
using namespace std;
char num(string s){
long long r=0,i,t=1;
for(i=s.size()-1;i>=0;i--){
r=r+(s[i]-'0')*t;
t=t*2;
}
char c;
if(r<10){
c=r+'0';
}else{
c=r+'A'-10;
}
return c;
}
string t[16]={"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};
int main(){
string s,r;
cin>>s;
int x;
for(int i=0;iif(isdigit(s[i])){
x=s[i]-'0';
}else{
x=s[i]-'A'+10;
}
r=r+t[x];
}
while(r[0]=='0'){
r.erase(0,1);
}
if(r==""){
cout<<0;
}else{
string t;
if(r.size()%3==1){
r="00"+r;
}else if(s.size()%3==2){
r="0"+r;
}
for(int i=0;it=r.substr(i,3);
cout<
r.size()?
r.length吧