在十六进制转为八进制的过程中包含了将十六进制转化为二进制以及将二进制转化为八进制!
我自己测试是没什么问题,但是在蓝桥杯官网的测试系统就显示运行错误qwq
不知道为什么
附代码:
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
string code1(char p);
string code2(char a,char b,char c);
int i,n,j,flag;
cin>>n;
string sixteen[n],two[n],eight[n];
char twoo[n][1000],eightt[n][1000];
int len1[n],len2[n];
for(i=0;i<n;i++)
cin>>sixteen[i];
for(i=0;i<n;i++)
{
len1[i] = sixteen[i].length();
for(j=0;j<len1[i];j++)
two[i] = two[i] + code1(sixteen[i][j]);
len2[i] = two[i].length();
for(j=0;j<=len2[i];j++)
twoo[i][j] = two[i][j];
if(len2[i]%3==1)
{
for(j = len2[i]+1;j>=0;j--)
twoo[i][j] = twoo[i][j-2];
twoo[i][1] = twoo[i][0] = '0';
}
if(len2[i]%3==2)
{
for(j = len2[i];j>=0;j--)
twoo[i][j] = twoo[i][j-1];
twoo[i][0] = '0';
}
for(j=0;j<len2[i];j=j+3)
eight[i] = eight[i] + code2(twoo[i][j],twoo[i][j+1],twoo[i][j+2]);
for(j=0;j<len2[i];j++)
eightt[i][j] = eight[i][j];
for(j=0;j<eight[i].length();j++)
if(eight[i][j]!='0'){
flag = j;break;
}
for(j=flag;j<eight[i].length();j++)
cout<<eight[i][j];
cout<<endl;
}
return 0;
}
string code2(char a,char b,char c)
{
if(a=='0'&&b=='0'&&c=='0') return("0");
if(a=='0'&&b=='0'&&c=='1') return("1");
if(a=='0'&&b=='1'&&c=='0') return("2");
if(a=='0'&&b=='1'&&c=='1') return("3");
if(a=='1'&&b=='0'&&c=='0') return("4");
if(a=='1'&&b=='0'&&c=='1') return("5");
if(a=='1'&&b=='1'&&c=='0') return("6");
if(a=='1'&&b=='1'&&c=='1') return("7");
}
string code1(char p)
{
if(p == '0') return("0000");
if(p == '1') return("0001");
if(p == '2') return("0010");
if(p == '3') return("0011");
if(p =='4') return("0100");
if(p == '5') return("0101");
if(p == '6') return("0110");
if(p == '7') return("0111");
if(p == '8') return("1000");
if(p == '9') return("1001");
if(p == 'A') return("1010");
if(p == 'B') return("1011");
if(p == 'C') return("1100");
if(p == 'D') return("1101");
if(p == 'E') return("1110");
if(p == 'F') return("1111");
}
还有十六进制转化为十进制的,这个就比较简单了
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
long long sum=0;
char pp[100];
scanf("%s",&pp);
int len;
len = strlen(pp);
for(int i=0;i<len;i++)
{
if(pp[i]>='0'&&pp[i]<='9')
sum = sum + (pp[i]-48)*pow(16,len-i-1);
if(pp[i] == 'A')
sum = sum + 10*pow(16,len-i-1);
if(pp[i] == 'B')
sum = sum + 11*pow(16,len-i-1);
if(pp[i] == 'C')
sum = sum + 12*pow(16,len-i-1);
if(pp[i] == 'D')
sum = sum + 13*pow(16,len-i-1);
if(pp[i] == 'E')
sum = sum + 14*pow(16,len-i-1);
if(pp[i] == 'F')
sum = sum + 15*pow(16,len-i-1);
}
printf("%I64d",sum);
return 0;
}
最近一直在划水,我的300元报名费要打水漂了呜呜呜