gpt4 book ai didi

c++ - 将 int 数组更改为 char 数组

转载 作者:太空宇宙 更新时间:2023-11-04 13:10:58 25 4
gpt4 key购买 nike

大家好,我在各种情况下运行某些代码时遇到困难。我有代码可以找出数组中所有数字中有多少个素数,乘以所需的时间,并打印出有多少个素数。这一切工作正常,但我需要运行相同的代码,但使用 char 数组。这就是问题所在。这是代码,带有一个整数数组:

#include "stdafx.h"
#include <iostream>
#include <time.h>
#include <stdio.h>
using namespace std;

static const int N = 1000;

int main()
{
int i, a[N];

clock_t start = clock();

for (i = 2; i < N; i++) a[i] = i;
for (i = 2; i < N; i++)
if (a[i])
for (int j = i; j*i < N; j++) a[i*j] = 0;

start = clock() - start;

int primes = 0;
for (i = 2; i < N; i++) {
if (a[i]) {
primes++;
cout << " " << i;
if (primes % 10 == 0)
cout << "\n";
}
}
printf("\nIt took %d clicks (%f seconds) to find all prime numbers.\n", start, ((float)start) / CLOCKS_PER_SEC);
cout << "The number of primes out of " << N << " integers is " << primes << endl;
return 0;
}

当我简单地将数组的“int”替换为“char”,并将“N”设置为 10 或 100 之类的值时,效果很好,除了素数的外观。任何更高的东西都不会打印出来。我知道这并不像将“int”更改为“char”那么简单,但我对这个问题毫无希望。我需要再次执行此操作没有帮助,但将数组更改为 bool 类型(这对我来说也没有多大意义。)

任何一种见解或简单的解决方案都会很棒。与此同时,我会继续寻找一些东西。谢谢!

最佳答案

问题是您将 i 存储到 a[i] 中。当achar数组时,元素的最大值为127(如果char默认为signed) 或 255(如果它是 unsigned),假设典型系统具有 8 位字节。如果已签名,则溢出会导致实现定义的行为;如果它是无符号的,则溢出环绕模 256

您唯一关心的是元素的值是零还是非零,因此没有必要在它们中放入不同的值。只需将它们全部初始化为 1

for (i = 2; i < N; i++) a[i] = 1;

当您将其更改为 bool 值时,这也会起作用。

关于c++ - 将 int 数组更改为 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39968130/

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