在devc++可以运行但是在pta上无法运行的16进制转2进制c++代码

一段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;
}

img

img

img

仅供参考:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
int main() {
    int i,v;
    char bs[33];
    char b[33];
    char hs[9];
    char h[9];
    char s[4];
    char *e;

// 十进制整数转二进制串;
    i=1024;
    ltoa(i,b,2);
    sprintf(bs,"%032s",b);
    printf("i=%d,bs=%s\n",i,bs);
// 十进制整数转十六进制串;
    i=1024;
    ltoa(i,h,16);
    sprintf(hs,"%08s",h);
    printf("i=%d,hs=%s\n",i,hs);
// 十六进制字符串转成十进制数
    strcpy(hs,"00000400");
    sscanf(hs,"%x",&i);
    printf("hs=%s,i=%d\n",hs,i);
// 二进制字符串转化为十六进制字符串;
    strcpy(bs,"00000000000000000000010000000000");
    i=strtol(bs,&e,2);
    ltoa(i,h,16);
    sprintf(hs,"%08s",h);
    printf("bs=%s,hs=%s\n",bs,hs);
// 二进制字符串转化为十进制数;
    strcpy(bs,"00000000000000000000010000000000");
    i=strtol(bs,&e,2);
    printf("bs=%s,i=%d\n",bs,i);
// 十六进制字符串转成二进制串
    strcpy(hs,"00000400");
    sscanf(hs,"%x",&i);
    ltoa(i,b,2);
    sprintf(bs,"%032s",b);
    printf("hs=%s,bs=%s\n",hs,bs);
// ASC\GBK字符串转十六进制串
    strcpy(s,"a汉");
    i=0;
    while (1) {
        if (0==s[i]) break;
        sprintf(hs+i*2,"%02X",(unsigned char)s[i]);
        i++;
    }
    setlocale(LC_ALL,"chs");
    printf("s=%s,hs=%s\n",s,hs);
// 十六进制字符串转成汉字(GBK)及字符(ASC)
    strcpy(hs,"61BABA");
    i=0;
    while (1) {
        if (1!=sscanf(hs+i*2,"%2x",&v)) break;
        s[i]=(char)v;
        i++;
    }
    s[i]=0;
    printf("hs=%s,s=%s\n",hs,s);

    return 0;

}
//i=1024,bs=00000000000000000000010000000000
//i=1024,hs=00000400
//hs=00000400,i=1024
//bs=00000000000000000000010000000000,hs=00000400
//bs=00000000000000000000010000000000,i=1024
//hs=00000400,bs=00000000000000000000010000000000
//s=a汉,hs=61BABA
//hs=61BABA,s=a汉


【相关推荐】




如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^