
跪求C语言答案,在线等,希望各位相助
题目描述给定一个二进制表示的非负整数,将其转换为十六进制数。要求使用函数编写程序:函数原型如下:voidconvert(char*input,char*output);变...
题目描述
给定一个二进制表示的非负整数,将其转换为十六进制数。
要求使用函数编写程序:函数原型如下:
void convert( char *input, char *output);
变量input为读入的二进制字符串,变量output为函数中要输出的十六进制字符串
输入
输入数据有多组,第一行为数据的组数T,接下来有T组数据。
每组数据占一行,每行为一个二进制整数(不含多余的前导0),最多1000位。
输出
对于每组测试数据首先输出"Case #: ",#表示第几组测试数据,接着输出对应的十六进制数,字母用大写表示,每组测试结果占一行。
样例输入
2
1111
10100100
样例输出
Case 1: F
Case 2: A4
提示
5 = '5' - '0'; 展开
给定一个二进制表示的非负整数,将其转换为十六进制数。
要求使用函数编写程序:函数原型如下:
void convert( char *input, char *output);
变量input为读入的二进制字符串,变量output为函数中要输出的十六进制字符串
输入
输入数据有多组,第一行为数据的组数T,接下来有T组数据。
每组数据占一行,每行为一个二进制整数(不含多余的前导0),最多1000位。
输出
对于每组测试数据首先输出"Case #: ",#表示第几组测试数据,接着输出对应的十六进制数,字母用大写表示,每组测试结果占一行。
样例输入
2
1111
10100100
样例输出
Case 1: F
Case 2: A4
提示
5 = '5' - '0'; 展开
3个回答
展开全部
#include <stdio.h>
#include <string.h>
void convert(char *input, char *output)
{
int len, i, j, k, n;
int w[4] = {1, 2, 4, 8};
len=strlen(input);
j = (len + 3)/4;
output[j] = '\0';
j = j-1;
i = len - 1;
while(i>=0){
n = 0;
for(k=0; k<4&& i>=0;k++) {
n += (input[i] - '0') * w[k];
i--;
}
if( n< 10) output[j] = n + '0';
else output[j] = n -10 + 'A';
j --;
}
return;
}
int main()
{
int n, t;
char input[1001], output[260];
scanf("%d", &n);
for(t=1; t<=n; t++) {
scanf("%s", input);
convert(input, output);
printf("Case %d: %s\n", t, output);
}
return 0;
}
#include <string.h>
void convert(char *input, char *output)
{
int len, i, j, k, n;
int w[4] = {1, 2, 4, 8};
len=strlen(input);
j = (len + 3)/4;
output[j] = '\0';
j = j-1;
i = len - 1;
while(i>=0){
n = 0;
for(k=0; k<4&& i>=0;k++) {
n += (input[i] - '0') * w[k];
i--;
}
if( n< 10) output[j] = n + '0';
else output[j] = n -10 + 'A';
j --;
}
return;
}
int main()
{
int n, t;
char input[1001], output[260];
scanf("%d", &n);
for(t=1; t<=n; t++) {
scanf("%s", input);
convert(input, output);
printf("Case %d: %s\n", t, output);
}
return 0;
}
追问
怎样使输出的时候答案是在一起的呢?
而不是输一组数据出一个答案
追答
那你就用一个字符数组把结果保存起来吧。
不过那样的话,会占用很多的空间的,输入的case数也是不确定的。
但是我觉得题目的意思并不是要求输入完了才输出的。
如下:
int main()
{
int n, t;
char input[1001], output[260], result[100][280]; //这儿多申请了一个result数组。
scanf("%d", &n);
for(t=1; t<=n; t++) {
scanf("%s", input);
convert(input, output);
sprintf(result[t-1], "Case %d: %s\n", t, output); //将输出的内存保存在result之中。
}
for(t=0; t<n; t++) { //最后输出到控制台。
printf("%s", result[t]);
}
return 0;
}
展开全部
int sum = 0; char result[16]; for(int i=0; i<16; i++){ sum += array[i] * pow(2, 15 - i); } sprintf(result, "%x", sum);
追问
给一个完整的程序吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个直接有函数用的吧,sprintf()
追问
不会呀,可不可以给个详细点的呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询