簡體   English   中英

c++ 程序返回“0 0”而不是返回素數。 為什么它沒有從“素數”function 中得到正確的 output?

[英]c++ program return “0 0” instead of returning prime numbers. Why does it not get the correct output from the “prime” function?

我的 function “素數”采用動態數組並返回一個僅由素數組成的動態分配數組。 但是當它返回到main時,它給出了錯誤的output並打印

Output:

0 0

預期 Output:

2 3

我的代碼:

#include<stdio.h>
#include<math.h>
#include <cstdio>
#include<iostream>
using namespace std;
const int capacity = 10000;
int * prime(int numbers[capacity])
{
    int *primeArray;
    primeArray = new int[capacity];
    int lenghtOfArray=sizeof(primeArray)/sizeof(int); 
    int counter = 0;
    for(int index=0;index<lenghtOfArray;index++){
    // 0 and 1 are not prime numbers
    if (numbers[index] == 0 || numbers[index] == 1) {
        continue;
    }
    else {
        for (int i = 2; i <= numbers[index] / 2; ++i) {
            if (numbers[index] % i == 0) {
                primeArray[counter] = numbers[index];
                counter = counter + 1;
                break;
            }
        }
    }
    }
    return primeArray;
}


main()
{
    int *mynumbers;
    mynumbers = new int[capacity];
    mynumbers[0] = 1;
    mynumbers[1] = 2;
    mynumbers[2] = 3;
    mynumbers[3] = 4;
    mynumbers[4] = 5;
    mynumbers[5] = 6;
    int* myprime = prime(mynumbers);
    cout << myprime[0] << " " << myprime[1];
}

什么地方出了錯?

    int lenghtOfArray=sizeof(primeArray)/sizeof(int); 

獲取動態分配數組的長度是錯誤的方法。

sizeof(primeArray)不是分配的大小,而是指針的大小。

您已經有了數組元素的數量,因此使用它來獲取數組的長度:

    int lenghtOfArray=capacity;

但這不會使您的代碼正確,因為現在您的代碼將使用int數組的未初始化元素的不確定值。 您要做的就是將有效元素的數量傳遞給 function。

改變點:

// add argument to pass the number of data
// int * prime(int numbers[capacity])
int * prime(int numbers[capacity], int num_numbers)
{
    int *primeArray;
    primeArray = new int[capacity];
    // use the passed number
    // int lenghtOfArray=sizeof(primeArray)/sizeof(int); 
    int lenghtOfArray=num_numbers; 
    // pass the number of data
    // int* myprime = prime(mynumbers);
    int* myprime = prime(mynumbers, 6);
    cout << myprime[0] << " " << myprime[1];
}

另一點是您的代碼正在存儲不是素數而不是素數的數字。

而不是這個

        for (int i = 2; i <= numbers[index] / 2; ++i) {
            if (numbers[index] % i == 0) {
                primeArray[counter] = numbers[index];
                counter = counter + 1;
                break;
            }
        }

你應該用這個

        // add the number for now
        primeArray[counter] = numbers[index];
        counter = counter + 1;
        for (int i = 2; i <= numbers[index] / 2; ++i) {
            if (numbers[index] % i == 0) {
                // it is not actually a prime, rollback
                counter = counter - 1;
                break;
            }
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM