题目描述
给定 nn 个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数nn (1\le n\le101≤n≤10)。 接下来 nn 行,每行一个由 00~99、大写字母 AA~FF 组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过1010。
输出格式
输出 nn 行,每行为输入对应的八进制正整数。
注意
输入的十六进制数不会有前导 00,比如 012A012A。 输出的八进制数也不能有前导0。
输入数据 1
1
39123ABC
输出数据 1
7104435274
代码:
#include<iostream>
#include<cmath>
using namespace std;
int main() {
long long b=0,sum=0,d;
cin>>d;
for(int i=1; i<=d; i++) {
sum=0;
b=0;
string a="",c="";
cin>>a;
for(int i=a.length()-1; i>=0; i--) {
if(a[i]>='0'&&a[i]<='9') {
b+=pow(16,sum)*(a[i]-'0');
} else {
if(a[i]=='A') b+=pow(16,sum)*10;
if(a[i]=='B') b+=pow(16,sum)*11;
if(a[i]=='C') b+=pow(16,sum)*12;
if(a[i]=='D') b+=pow(16,sum)*13;
if(a[i]=='E') b+=pow(16,sum)*14;
if(a[i]=='F') b+=pow(16,sum)*15;
}
sum++;
}
for(;;) {
int y;
y=b%8;
b/=8;
c+=char(y+'0');
if(!b) break;
}
for(int i=c.length()-1; i>=0; i--) cout<<c[i];
cout<<endl;
}
return 0;
}