こんにちはすべて私は様々な状況下でいくつかのコードを実行するのが難しいです。素数の数、配列内のすべての数、時間の長さ、および素数の数を出力するコードがあります。これはうまくいきますが、同じコードを実行する必要がありますが、char配列を使用する必要があります。 。問題がでてくるところがある。ここのコードはintの配列で、次のとおりです。int配列を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」を置き換える、および10のようなものに「N」を設定すると、または100は素数がどのように見えるかを除いてうまく動作します。それ以上のものは何も印刷されません。私はそれが「int」から「char」までのところを変えるだけではなく、被験者に絶望的に失われていることを知っています。私はこれをやり直す必要はないが、配列をbool型に変更すると助けになる。(それはどちらにも意味がない。)
あらゆる種類の洞察力や簡単な解決策が素晴らしいだろう。その間に何かを探し続けるつもりです。ありがとう!
再生できません。 char配列でうまく動作します(明白ですが無害なバグにもかかわらず)。 –
試してみたときにあなたがしたことを聞いてもよろしいですか?あなたは 'int i、a [N]'を 'char i、a [N]'に置き換えましたか、それともそれ以上にありましたか?私はかなり失われています。 – Wil
'a [i]'の最大値は、 'char'が符号付きであるか符号なしであるかによって、127または255です。したがって、これよりも 'N'を高く設定すると、その限界を超えたすべての要素に無効な値を割り当てます。 – Barmar