为什么这种方法过不了测试?一定要用判断字符的那种方法吗?

/*给定n个十六进制正整数,输出它们对应的八进制数。*/
图片说明


#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int n=0;
    cin >> n;
    int i = 0,s=0;
    while (n > 0)
    {
        int k = 1;
        for (int j = 1; j <= i; j++)
        {
            k *= 16;
        }
        s += ((n % 10)* k);
        n /= 10;
        i++;
    }
    cout << oct << s<<endl;
    return 0;
}

没理解你的问题,,,你这个不是将你输入的十进制数字当做16进制然后通过oct输出为8进制的代码吗
cin>>hex>>n; 这个才是输入十六进制的正确用法把。。。