给定一个 𝑁 位序列,每个位的值是 0 或 1。您需要将此序列划分为字节,每个字节 8 位(最后一个字节可以有更少的位)。之后,需要以人们熟悉的十进制系统打印所有接收到的字节的值。 字节内的位以现代计算机熟悉的小端顺序写入:首先是低位,然后是高位。 输入文件的第一行包含一个整数 𝑁 — 序列中的位数。第二行正好包含𝑁字符0或1:序列中位的值。 在文件的第二行之后,可能会出现换行符,也可能不会出现。 我的代码如下所示。不管我和他打多少架——错误的答案就是输出。告诉一个愚蠢的新手可以做什么/纠正什么?
#include<stdio.h>
#include<math.h>
int main(){
int N, i, v;
scanf("%d", &N);
int p[N-1];
for (i=0; i<=N-1; i+=8){
v=((p[i]*(pow(2,i)))+(p[i+1]*(pow(2,(i+1))))+(p[i+2]*(pow(2,(i+2))))+(p[i+3]*(pow(2,(i+3))))+(p[i+4]*(pow(2,(i+4))))+(p[i+5]*(pow(2,(i+5))))+(p[i+6]*(pow(2,(i+6))))+(p[i+7]*(pow(2,(i+7)))));
printf("%d", v);
}
}
安静的恐怖:)
首先,
pow(2, i)最好改为使用1 << i- 即 向右位移 1ch - 这相当于提高到 2 的幂,速度更快,并且不需要连接额外的库我将如何制作算法:
循环 8 并累积字节
我会沿着缓冲区走上
p一个周期当然我们必须考虑到最后一个字节可能需要少于 8 个循环步骤:
结果,算法将是这样的:
当然,我们假设数组
p已经包含数字如果它包含字母,那么它应该是这样的:
附言
如果我没有混淆 biganian 和 litlandian,否则它必须是这样的:
试试这样:
输入示例:
结论: