写在前面:这个方法没通过!跪求大佬帮忙看一下!!
我想的是先转换成十进制,再由十进制转换成八进制。
正确做法指路:https://blog.csdn.net/KarlieKloss/article/details/88558869
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int main()
{
int n;
do{
cin>>n;
}while(n<1||n>10);
string sixteen[n];
for(int i=0;i<n;i++)
{
cin>>sixteen[i];
}
for(int i=0;i<n;i++)
{
long long sum=0;
int len=sixteen[i].length();
for(int j=0;j<len;j++)
{
if(sixteen[i][j]>='A')
{
sum+=(sixteen[i][j]-'A'+10)*pow(16,len-1-j);
}
else
{
sum+=(sixteen[i][j]-'0')*pow(16,len-1-j);
}
}
if(sum==0)
cout<<"0"<<endl;
else
{
int eight[100000];
int k;
for(k=0;sum>0;k++)
{
eight[k]=sum%8;
sum/=8;
}
for(int p=k-1;p>=0;p--)
cout<<eight[p];
cout<<endl;
}
}
return 0;
}