大家好,我在各种情况下运行某些代码时遇到了困难。我有代码可以找到有多少素数,数组中的所有数字,所需的时间,以及打印的素数。这一切都很好,但后来我需要运行相同的代码,但使用char数组。这就是问题所在。这是代码,带有一组int:
#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(这对我来说也没有多大意义。)
任何形式的洞察力或简单的解决方案都会很精彩。在此期间我会继续寻找一些东西。谢谢!
答案 0 :(得分:0)
问题是您将i
存储到a[i]
。当a
是char
数组时,元素的最大值为127
(如果char
默认为signed
)或255
(如果unsigned
它是256
),假设一个典型的系统具有8位字节。如果它已签名,则溢出会导致实现定义的行为;如果它是无符号的,则溢出包围模1
。
您唯一关心的是元素的值是零还是非零,因此不需要在其中添加不同的值。只需将它们全部初始化为for (i = 2; i < N; i++) a[i] = 1;
。
services.AddDataProtection()
.SetApplicationName("Report Book Resource Server")
.PersistKeysToFileSystem(new DirectoryInfo(folderForKeyStore))
.ProtectKeysWithCertificate(cert);
当您将其更改为布尔值时,这也将起作用。