gpt4 book ai didi

c - 关于C语言中位序列的作业

转载 作者:行者123 更新时间:2023-11-30 16:00:18 24 4
gpt4 key购买 nike

我有作业。问题是:

编写一个函数,该函数接受单个整数(int 输入)作为参数,并返回无符号字符这样:a- 如果输入为负数或大于 11,111,111 或包含非 0 或 1 的数字;那么该函数将打印错误消息(例如“无效输入”)并返回 0,b- 否则;该函数将假设输入的以 10 为基数的值表示一个位序列,并返回与该序列对应的仅幅度位模型。

例如:如果输入为1011,则返回值为11,如果输入为1110,则返回值为14

这是我为 a 所做的工作,而我被困在 b 上。如何获取给定整数输入的位序列?

int main()
{
int input = 0;

printf("Please type an integer number less than 11,111,111.\n");
scanf("%d",&input);

if(input < 0 || input > 11111111)
{
printf("Invalid Input\n");
system("PAUSE");
return 0;
}


for (int i = 0; i < 8; i++)
{
int writtenInput = input;
int single_digit = writtenInput%10;

if(single_digit == 0 || single_digit == 1)
{
writtenInput /= 10;
}
else
{
printf("Your digit contains a number that does not 0 or 1. it is invalid input\n");
system("PAUSE");
return 0;
}
}

printf("Written integer is %d\n",input);

system("PAUSE");
return 0;
}

最佳答案

您缺少的部分是基本转换。要解释以 B 为基数的数字,您需要做的是将数字 N 乘以 B^N(假设您从最低有效位开始计算数字)。例如,以 16 为基数,A108 = (10)*16^3 + 1*16^2 + 0*16^1 + 8*16^0。你的基数是 2(二进制)。

或者,如果将表达式重写为:

,则可以避免求幂:
hex A008 = ((((10*16) + 1)*16 +0)*16 + 8

如果您的输入是用可能未知长度的数组表示的,则会更简单,因为它可以轻松转换为仅包含加法和乘法的循环。

在二进制的特殊情况下,您可以使用另一种直接解决方案,对于每个非零数字,将相应的位设置为足够大的整数类型(在您的情况下,unsigned char就够了),循环结束时变量的值将是转换的结果。

关于c - 关于C语言中位序列的作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7865812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com