一段16进制转2进制的c++代码,在devc++上可以运行,在pta上不行
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
int j16(string str) {
int l=str.length(),sum=0,num=0;
//cout<<l<<endl;
for(int i=0; i<l; i++) {
if(str[l-i-1]>='0'&&str[l-i-1]<='9') {
sum+=pow(16,i)*(str[l-i-1]-'0');
} else {
sum+=pow(16,i)*(str[l-i-1]-'A'+10);
}
}
//cout<<sum<<endl;
return sum;
}
/*
sum=5
max=2
a=1
max=4
a=2
max=8
a=3
*/
string j2(int sum) {
int max=1,a=0;
string str;
while(max<sum) {
max*=2;
a++;
}
for(int i=a; i>=0; i--) {
if(sum>=pow(2,i)) {
str[a-i]='1';
sum-=pow(2,i);
} else {
str[a-i]='0';
}
}
//cout<<str<<endl;
return str;
}
int main() {
int n,i,j,k,flag=0,b=0;
string str1,str2;
cin>>n;
getchar();
for(i=0; i<n; i++) {
for(j=0; str2[j]!='\0'; j++) {
str2[j]='\0';
}
flag=0;
b=0;
getline(cin,str1);
for(k=0; str1[k]!='\0'; k++) {
if(str1[k]!='0') {
b=1;
}
}
if(b==0) {
cout<<0<<endl;
} else {
str2=j2(j16(str1));
for(j=0; str2[j]!='\0'; j++) {
if(str2[j]=='0'&&flag==0) {
continue;
}
if(str2[j]=='1'&&flag==0) {
flag=1;
}
cout<<str2[j];
}
cout<<endl;
}
}
return 0;
}