/*问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由09、大写字母AF组成的字符串,
表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。*/
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
string hexadecimal[6]; //十六进制数
string decimalism[10]; //十进制
string binary[10]; //二进制
string octonary[10]; //八进制
int n,j;
long long b[10]={0}; //存储十进制
cin>>n;
if((n>10)||(n<0))
{
cout<<"输入不合法"<<endl;
return 0;
}
cout<<"输入<<n<<个16进制 的数"<<endl;
for(int i=0;i<n;i++)
{
cin>>hexadecimal[i];
/*转换十进制*/
for(int i=0;i<n;i++)
{
j=0;
while(hexadecimal[i][j])
{
switch (hexadecimal[i][j])
{
case '0': b[i]+=0; break;
case '1': b[i]+=1; break;
case '2': b[i]+=2; break;
case '3': b[i]+=3; break;
case '4': b[i]+=4; break;
case '5': b[i]+=5; break;
case '6': b[i]+=6; break;
case '7': b[i]+=7; break;
case '8': b[i]+=8; break;
case '9': b[i]+=9; break;
case 'A': b[i]+=10; break;
case 'B': b[i]+=11; break;
case 'C': b[i]+=12; break;
case 'D': b[i]+=13; break;
case 'E': b[i]+=14; break;
case 'F': b[i]+=15; break;
case 'a': b[i]+=10; break;
case 'b': b[i]+=11; break;
case 'c': b[i]+=12; break;
case 'd': b[i]+=13; break;
case 'e': b[i]+=14; break;
case 'f': b[i]+=15; break;
default: break;
}
j++;
b[i]*=16;
}
}
cout<<"输出八进制数"<<endl;
for(int i=0;i<n;i++)
{
b[i]=b[i]/16;
cout<<(b[i]/8*10+b[i]%8)<<endl;
}
return 0;
}
稍后补充类的方法
补充字符串知识点、
今天写程序居然卡壳了,一时间不知道怎么转换。。。太弱了
~
~
使用类实现功能
#include<iostream>
#include<string>
using namespace std;
class zhuanhuan
{
public:
int import_long(int len);
void import_hexadecimal(void); //输入十六进制
void zhuanhuan_16_8(void);
void output_decimalism(); //输出8进制
protected:
int chang;
string hexadecimal[6]; //十六进制数
string decimalism[10]; //十进制
string binary[10]; //二进制
string octonary[10]; //八进制
string arr;
long long b[10]={0}; //存储十进制
};
int zhuanhuan::import_long(int len)
{
if((len>10)||(len<0))
{
cout<<"输入不合法"<<endl;
return 1;
}
chang= len;
return 0;
}
void zhuanhuan::import_hexadecimal(void) //输入十六进制
{
for(int i=0;i<chang;i++)
{
std::cout<<"输入第"<<i<<"个数字";
std::cin>> arr;
if(arr.length()<10000)
{
hexadecimal[i]=arr;
}
else{cout<<"输入错误"<<endl;}
}
}
void zhuanhuan::zhuanhuan_16_8(void)
{
int j;
/*转换十进制*/
for(int i=0;i<chang;i++)
{
j=0;
while(hexadecimal[i][j])
{
switch (hexadecimal[i][j])
{
case '0': b[i]+=0; break;
case '1': b[i]+=1; break;
case '2': b[i]+=2; break;
case '3': b[i]+=3; break;
case '4': b[i]+=4; break;
case '5': b[i]+=5; break;
case '6': b[i]+=6; break;
case '7': b[i]+=7; break;
case '8': b[i]+=8; break;
case '9': b[i]+=9; break;
case 'A': b[i]+=10; break;
case 'B': b[i]+=11; break;
case 'C': b[i]+=12; break;
case 'D': b[i]+=13; break;
case 'E': b[i]+=14; break;
case 'F': b[i]+=15; break;
case 'a': b[i]+=10; break;
case 'b': b[i]+=11; break;
case 'c': b[i]+=12; break;
case 'd': b[i]+=13; break;
case 'e': b[i]+=14; break;
case 'f': b[i]+=15; break;
default: break;
}
j++;
b[i]*=16;
}
}
}
void zhuanhuan::output_decimalism() //输出十进制
{
cout<<"输出八进制数"<<endl;
for(int i=0;i<chang;i++)
{
b[i]=b[i]/16;
cout<<(b[i]/8*10+b[i]%8)<<endl;
}
}
int main(void)
{
int n;
zhuanhuan A;
cin>>n;
if(!A.import_long(n))
{
A.import_hexadecimal();
A.zhuanhuan_16_8();
A.output_decimalism();
}
return 0;
}
进制转换库函数方法
#include<iostream>
#include<string> //字符串
using namespace std;
int main(void)
{
long int decimalism,hex_1;
cin>>decimalism;
//cout<<hex<<decimalism<<endl;
cout<<"DEC:"<<decimalism<<endl;
cout<<"OCT:"<<oct<<decimalism<<endl;//八进制
cout<<"HEX:"<<hex<<decimalism<<endl;//十六进制
return 0;
}