#十六进制转二进制,二进制再转八进制,在东方博宜 1295上无法通过,请在我原来代码的基础上修改

#十六进制转二进制,二进制再转八进制,在东方博宜 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吧