【问题标题】:storing large integer consisting of zeroes and ones存储由零和一组成的大整数
【发布时间】:2017-01-18 22:01:55
【问题描述】:

我遇到了一个问题,我必须读取一个整数 D 使得 D 遵循以下规则:

-> D 只包含零和一

-> 1 ≤ 数的长度 D ≤ 10^5。

-> D 可以从零开始

此外,我必须将这个数字存储在数组中,这样 no 的每个数字都存储在数组的一个单元格中。

例如,如果数字是001011,它应该像这样存储在数组中

arr[0]=0  arr[1]=0  arr[2]=1  arr[3]=0  arr[4]=1  arr[5]=1

如何做到这一点?

【问题讨论】:

  • 您使用的是 C 还是 C++?如果是这样,请使用此语言进行标记。
  • 你做得很好。使用for 循环遍历索引并保存每个数字。要了解更多信息,请阅读 C 语言中的 forwhile 循环
  • 问题在于 D 是一个 INTEGER,它只能被读取一次,即一次读取。所以对于一个数字没有索引的意义
  • D contains only zeroes and ones - 听起来很奇怪。你确定你的那部分作业正确吗?
  • @imyjalil 逐个字符,通过realloc 调整大小循环算法可在您阅读更多D 数字时进行扩展。您准确地描述了剩下的要做什么。最终,您将在输入流(或 EOF)中达到非 {0,1} 值,这就是您停止的地方。或者,您可以只分配一个 100K 缓冲区(它不是那么大),将所有 char 值放入其中,将它们从字符 '0''1' 转换为 01,缩小到缓冲区适合,并完成它。

标签: c arrays binary integer scanf


【解决方案1】:

您的问题被称为 XY 问题(请参阅 https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。

真正的问题(正如您在评论中链接的那样)不需要存储 D 的数字。而只需计算 1 和 0 的数量。 比如:

#include <stdio.h>

int main(int argc, const char *argv[]) {

    int rc;
    char c;
    int numZero = 0;
    int numOne = 0;
    while(((rc = scanf("%c", &c)) == 1) && (c == '0' || c == '1'))
    {
        if (c == '0') 
            ++numZero ;
        else
            ++numOne;

        printf("%c", c);
    }
    printf("\n");
    printf("Zeros: %d Ones: %d\n", numZero, numOne);
    return 0;
}

输入:

111000111

输出:

111000111

零:3 个:6

现在您可以在计数器上执行一些逻辑来确定实际输出是“是”还是“否”。

祝你好运。

【讨论】:

  • 不用尴尬 :-)
  • @4386427 请更新问题。就目前而言,答案对于给定的问题没有意义。应编辑 cmets 中的讨论并将其添加到问题中。
  • @imyjalil 请更新问题。就目前而言,答案对于给定的问题没有意义。应编辑 cmets 中的讨论并将其添加到问题中。
  • @2501 - 同意,这个问题要求 Y 但确实需要 X。所以 Q->A 有点乱。
猜你喜欢
  • 1970-01-01
  • 2014-03-29
  • 1970-01-01
  • 2016-10-16
  • 2014-05-31
  • 1970-01-01
  • 2016-10-05
  • 2020-07-26
  • 2015-11-28
相关资源
最近更新 更多