红衫结晶水 2023-09-13 16:24 采纳率: 42.9%
浏览 6

在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

  • 写回答

2条回答 默认 最新

  • 赵4老师 2023-09-13 18:02
    关注

    仅供参考:

    #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汉
    
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 9月13日

悬赏问题

  • ¥15 非科班怎么跑代码?如何导数据和调参
  • ¥15 福州市的全人群死因监测点死亡原因报表
  • ¥15 Altair EDEM中生成一个颗粒,并且各个方向没有初始速度
  • ¥15 系统2008r2 装机配置推荐一下
  • ¥500 服务器搭建cisco AnyConnect vpn
  • ¥15 悬赏Python-playwright部署在centos7上
  • ¥15 psoc creator软件有没有人能远程安装啊
  • ¥15 快速扫描算法求解Eikonal方程咨询
  • ¥15 校内二手商品转让网站
  • ¥20 高德地图聚合图层MarkerCluster聚合多个点,但是ClusterData只有其中部分数据,原因应该是有经纬度重合的地方点,现在我想让ClusterData显示所有点的信息,如何实现?