这题好难,求大神帮忙 C语言程序设计题

示例输入:
2100110101101101
16
输出:
4D6D
说明:
2表示输入二进制
100110101101101为输入的二进制数
想要转化成16进制
N进制(N>10)大于10的数用字母表示,如11用A,12用B,以此类推。
N最大不超过36。
按要求编程代码

第1个回答  2018-11-11
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAXSIZE 1024
#define uLL unsigned long long

//    K进制转10进制 
uLL kBit_to_10(const char* num, int k)
{
    uLL res = 0, p = 1;
    for(int i = strlen(num)-1; i >= 0; --i, p*=k){
        int bit;
        if( num[i]>='A' && num[i]<='Z' ){
            bit = num[i] - 'A' + 10;
        }else{
            bit = num[i] - '0';
        }
        res += (p*bit);    
    }
    return res;
}

//    10进制转为K进制存储 
void toKbit(uLL num, int k, char buffer[])
{
    if( num == 0 ){
        buffer[0] = '0';
        buffer[1] = '\0';
    }    
        
    int i = 0;
    while( num != 0 ){
        int bit = num % k;
        if( bit >= 10 ){
            buffer[i++] = 'A' + bit - 10;
        }else{
            buffer[i++] = '0' + bit;
        }
        num /= k;
    }
    buffer[i] = '\0';
    strrev(buffer);    //    库函数,字符串逆置 
}

int main(void)
{
    int k1, k2;
    char num[MAXSIZE];
    char res[MAXSIZE];
    
    scanf("%d", &k1);    //    2
    scanf("%s", num);    //    100110101101101
    scanf("%d", &k2);    //    16
    
    uLL tmp = kBit_to_10(num, k1);
    toKbit(tmp, k2, res);
    
    puts(res);
    
    return 0;
}

本回答被提问者采纳
第2个回答  2018-11-11

N进制(N>10)大于10的数用字母表示,如11用A,12用B,以此类推。-------这有没有写错?十六进制中,A表示10,B表示11,……。下面的程序采用这种表示。

#include<stdio.h>
void n2r(int n,int r)
{if(n>=r)n2r(n/r,r);
 int t=n%r;
 printf("%c",t<=9?t+'0':t+55);
}
int main()
{char c;
 int r1,r2,n=0;
 scanf("%c",&c); 
 r1=c<='9'?c-'0':c-55;
 do
 {scanf("%c",&c);
  if(c=='\n')break;
  n=n*r1+(c<='9'?c-'0':c-55);
 }while(1);
 scanf("%d",&r2);
 n2r(n,r2);
 return 0;
}

这题好难,求大神帮忙 C语言程序设计题
include <stdio.h>#include <string.h>#include <stdlib.h>#define MAXSIZE 1024#define uLL unsigned long long\/\/ K进制转10进制 uLL kBit_to_10(const char* num, int k){ uLL res = 0, p = 1; for(int i = strlen(num)-1; i >= 0; --i, p*=k){ int bit;...

关于c语言程序设计的问题求大神帮忙!万分感谢!
(1)编辑(把程序代码输入,交给计算机)(2)编译(成目标程序文件.obj)编译是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析、语法分析、语义检查和中间代码生成、代码优化、目标代码...

C语言程序设计 我是C语言初学者,有一道看程序的题我有些弄不懂,还请...
答案:C A:是如果a>b,则一程序一直执行到“b=c;”,效果是换a与b的值;B:是如果a>b,则执行{ }里的语句,效果是交换a与b的值;C:是如果a>b,则执行c=a; 无论a是否大于b,c的值都要给a,a-b;没什么作用;D:是如果a>b,则效果是交换a与b的值,c相当于中转站,a-b;没什么作...

急求解答:C语言程序设计试题 请专长人士帮忙解答 谢!!!
1.一个函数一般由两部分组成,它们分别是函数名和函数体。2.一个C语言的程序至少应包含一个主函数。3.函数体用{符号开始,用}符号结束。4.欲将一个16位二进制的整数变量的高8位清零,而只保留低8位,可用的方法是和0x00ff进行与运算。5.数组在内存中是一块连续的储存区,数组名代表首地址。6....

c语言程序设计问题
答:一个一个来:先看i:i=15; m=(i++)+(i++)+(i++); 可以化解为: m=i+i+i; i++; i++; i++;从左至右执行。这是c语音的执行顺序。得 m=45;在看j:j=20; n=(--j)+(--j)+(--j);可以化解为:看计算机先后执行顺序:先算第一个--j,再算第二个--j,在...

请C语言高手帮忙做一下c程序设计题目
题目通讯录1.设计要求:通讯录至少应该有以下数据项:姓名,地址,手机,邮编,E-mail。对通讯录应该包含有以下操作:向通讯录中添加信息,在通讯录中按姓名或手机号查找个人信息,删... 题目 通讯录1. 设计要求:通讯录至少应该有以下数据项:姓名,地址,手机,邮编,E-mail。对通讯录应该包含有以下操作:向通讯录中添加...

关于C语言程序设计的几道题。学霸们帮一下忙吧。
第五题:include <stdio.h> include <string.h> int main(){ int a[3][4];int b[4][3];int i,j;for(i=0;i<3;i++)for(j=0;j<4;j++){ scanf("%d",&a[i][j]);b[j][i]=a[i][j];} printf("转置后的数组为:\\n");for(i=0;i<4;i++){ for(j=0;j<3;j++...

十万火急,,,急求懂C语言程序设计的好心人帮做试题答案!!!
选择题:1、d 3、c 4、d 8、d 9、a 10、d 填空题:1、} 2、.c文件 3、43 5、y = y + 1;7、15 8、数组 9、连接 10、25 11、(char*)P;12、0 13、r = malloc(sizeof(struct Worker));编程题:1、include <stdio.h> int main(){ int i = 0;for(i = 0; i <= 50...

C语言程序设计的设计问题啊,求高手解决小CASE~
main(){ int i;float m;printf("请输入你购买商品的件数:");scanf("%d",&i);if(i<10)m=i*2.85;else if(i<=100)m=i*2.85*0.95;else m=i*2.85*0.9;printf("%.2f",m);}

C语言程序设计题,哥哥姐姐帮帮我 啊
12345(从键盘敲入)这是一个5位数 逆序输出:5 4 3 2 1 运行结果2:请输入一个不大于5位的数字:1234 这是一个4位数 逆序输出:4 3 2 1 其他3位,2位,1位的效果同上。源程序如下:include<stdio.h> main(){ int a;printf("请输入一个不大于5位的数字:\\n");scanf("%d"...

相似回答