решить, является ли число идеальным или простым - PullRequest
2 голосов
/ 13 декабря 2010

проблема в следующем: «Напишите функцию, чтобы узнать, является ли число простым или совершенным числом.»

Пока я сначала работал над идеальной частью, и вот что у меня есть:

#include <iostream>
using namespace std;
bool perfectNumber(int);
int main()
{
 int number;

 cout<<"Please enter number:\n";
 cin>>number;
 bool perfectNumber(number);

 return 0;
}
bool perfectNumber(int number)
{
 int i;

 int sum=0;
 for(i=1;i<=number/2;i++)
 {
  if(number%i==0)
  {
   sum+=i;
  }
 }
 if (sum==number)
  return i;
 else
  return 0;
}

ОДНАКО, кажется, в этом коде есть ошибки. Я просмотрел книгу, но по этой теме ничего не говорится. Я хотел бы получить совет о том, как исправить этот код.

спасибо!

Ответы [ 4 ]

7 голосов
/ 13 декабря 2010
bool perfectNumber(number);

Это не вызывает функцию perfectNumber;он объявляет локальную переменную с именем perfectNumber типа bool и инициализирует ее значением number, преобразованным в тип bool.

Для вызова функции perfectNumber вам необходимоиспользуйте что-то вроде:

bool result = perfectNumber(number);

или:

bool result(perfectNumber(number));

С другой стороны: если вы собираетесь читать входные данные из потока (например, cin>>number), вы должныубедитесь, что извлечение значения из потока прошло успешно.Как и сейчас, если вы наберете asdf, извлечение завершится неудачно и number останется неинициализированным.Лучший способ проверить, успешно ли выполняется извлечение, - это просто проверить состояние потока:

if (cin >> number) {
    bool result = perfectNumber(number);
}
else {
    // input operation failed; handle the error as appropriate
}

Подробнее о том, как состояния ошибок потока устанавливаются и сбрасываются, можно узнать в Семантика флагов наbasic_ios.Вы также должны проконсультироваться с хорошей вводной книгой по C ++ , чтобы узнать о лучших практиках использования потоков.

1 голос
/ 30 ноября 2013
 bool isPerfect(  int number){
     int i;
     int sum=0;
     for(i=1;i<number ;i++){
         if(number %i == 0){
             cout<<"  " << i ;
             sum+=i;
         }
     }

     if (sum == number){
         cout<<"\n \t\t THIS NUMBER  >>>  "<<  number <<"   IS    PERFECT \n\n";
         return i;
     }else if (sum |= number) {
               cout<<"\nThis number >>> " <<  number <<"   IS  NOT  PERFECT \n\n";
               return 0;
     }
 }
1 голос
/ 13 декабря 2010
void primenum(long double x) {
    bool prime = true; 
    int number2;
    number2 = (int) floor(sqrt(x));// Calculates the square-root of 'x'

    for (int i = 1; i <= x; i++) {
        for (int j = 2; j <= number2; j++) {
            if (i != j && i % j == 0) {
                prime = false;
                break;
            }
        }
        if (prime) {
            cout << " " << i << " ";
            c += 1;
        }
        prime = true;
    }
}
0 голосов
/ 13 декабря 2010
#pragma hdrstop

#include <tchar.h>
#include <stdio.h>
#include <conio.h>
//---------------------------------------------------------------------------


bool is_prim(int nr)
{

    for (int i = 2; i < nr-1; i++) {

    if (nr%i==0) return false;

    }

    return true;

}

bool is_ptr(int nr)
{
    int sum=0;

    for (int i = 1; i < nr; i++) {

    if (nr%i==0) {
        sum=sum+i;
    }

    }

    if (sum==nr) { return true;

    }
    else return false;
}
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
    int numar;

    printf ("Number=");scanf("%d",&numar);
    if (is_prim(numar)==true) { printf("The number is prime");

    }
    else printf("The number is not prime");

    if (is_ptr(numar)==true) { printf(" The number is perfect");

    }
    else printf(" The number is not perfect");
    getch();
    return 0;
}
...