2016-03-31 9 views
-2

Sie müssen einen C-Code eingeben, der den Benutzer auffordert, eine Nummer einzugeben, und der Code überprüft, ob die Nummer eine "Cullen-Nummer" ist oder nicht.C-Code zum Suchen nach "Cullens Nummer"

Eine Zahl ist Cullens Nummer, solange Sie sie berechnen können, indem Sie "2^n * n + 1" ausführen.

Beispiele für Zahlen Cullens:

3=2^1 * 1 + 1 
9=2^2 * 2 + 1 
25=2^3 * 3 + 1 

der Code Hier ist das ich arbeiten, jede mögliche Hilfe?

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 

int main(void) 

{ 

    int num, brojP, potency = 0, numRepeats = 0, endResult=0, isCullen; 

    printf("Unesite broj"); 
    scanf("%d", &num); 

    do 
    { 

     potency = potency + 1; // initializing "potency" and at the same time making it one number larger at each repeat of the loop 
     do 
     { 
      brojP = 2*potency; 
      numRepeats = numRepeats + 1; 
     } while (numRepeats < potency); // this entire loop is used for "2^n" part 

     endResult = brojP * potency + 1; // calculate the "2^n * n + 1" 
     numRepeats = 0; 

     if (endResult == num) 
     { 
      isCullen = 1; 
      break; 
     } 


    } while (endResult < num); 

    if (isCullen == 1) 
     printf("Number inputted is Cullen's number\n"); 
    else 
     printf("Number inputted isn't Cullen't number\n"); 

    return 0; 


} 
+0

Sie haben ein * undefiniertes Verhalten *, da Variablen nicht initialisiert werden können. Nicht initialisierte lokale Variablen haben einen * unbestimmten * Wert. –

+0

Ihre Schleife, die '2^n' berechnen soll, funktioniert nicht. Es setzt 'brojP' für jedes Mal durch die Schleife, also ist es genau so, als würde man 'brojP = 2 * potenzieren; – Barmar

Antwort

1

Diese Schleife ist falsch:

do 
    { 
     brojP = 2*potency; 
     numRepeats = numRepeats + 1; 
    } while (numRepeats < potency); // this entire loop is used for "2^n" part 

Sie müssen das Ergebnis aus der vorherigen Iteration von 2 jedes Mal multiplizieren, aber du bist potency um 2 statt multipliziert wird. Da sich potency nicht ändert, machen Sie immer wieder die gleiche Aufgabe. Tun Sie es dieses mag:

brojP = 1; 
    for (numRepeats = 0; numRepeats < potency; numRepeats++) { 
     brojP *= 2; 
    } 
0

Es wäre vielleicht effizienter, wenn Sie dichotomischen Suche verwendet. Da Sie Ihr Ergebnis in einem int speichern, nehme ich an, dass die maximale Größe für die eingegebene Zahl 2^32 ist (int wird am häufigsten auf 32 Bits codiert). Sie können versuchen mit Potenz = 16 und dann, wenn die eingegebene Zahl größer ist mit 2^24 usw. Wenn (sagen wir) Sie versuchen für n = 6 dann n = 7 und keiner von ihnen funktioniert, wissen Sie, dass es ist keine Cullens Nummer. Sie werden Log2 (32) höchstens 5 mal berechnen.

EDIT: Übrigens, warum verwenden Sie nicht einfach die math.h Bibliothek?

Verwandte Themen