2017-02-12 2 views
-1

Ich habe Probleme beim Schreiben eines Programms, liest ein 64 Bit unsigned lange lang in hex und findet die häufigsten hex Ziffer und gibt, wie oft es auftritt, sowie die Ziffer selbst . Beispiel, Eingang: 0xABCD_FFFF_43FF_42CF Ausgang: Hex Ziffer F aufgetreten 4malFinden Sie die maximale Anzahl von aufeinanderfolgenden Hexadezimalziffern von Eingang

Bisher hier ist mein Code:

#include <stdio.h> 
int main() 
{ 
    int i = 0;  
    char count = 0; 
    char max = 0; 
    char hexDigit = 0; 
    unsigned long long x = 0xABCDFFFF43FF42CF; 

    for (i = 0; i < 16; i++) 
    { 
     if ((x >> i) & 0xF) // checking bits to see if they match previous hex digit 
     { 
      count++; // count increases if they are the same 
     } 
     else 
     { 
      count = 0; 
     } 

     if (count > max) 
     { 
      max = count; 
     } 
    } 

    printf("Hex digit %x occured %d times\n", hexDigit, max); 
} 

Ich bin nicht sicher, wie man heraus implementieren zu finden, die Hexadezimalzeichens so die auftritt jede Hilfe mit welcher Richtung ich gehen kann, wird sehr geschätzt.

+0

Denken Sie daran, dass ein Hexadezimalzeichens 4 Bits. –

+0

Es gibt nur "16" Hexadezimalziffern (vorausgesetzt, dass die Konvertierung in Groß-/Kleinschreibung erforderlich ist). Richten Sie also ein Array von 16 Ganzzahlen ein, initialisieren Sie alle auf Null, und erhöhen Sie für jede gefundene Hexadezimalzahl das entsprechende Array-Element. Wenn Sie mit dem Lesen fertig sind, suchen Sie das Element des Arrays mit dem maximalen Wert. Wenn Sie mit einem ganzzahligen Wert beginnen, ist es nicht so schwer, die Hexadezimalziffern zu erhalten (benutzen Sie Modulo '16' und dividiert durch' 16'). – Peter

+0

Ich schlage vor, dass Sie Ihren Computer ausschalten und einen Stift und Papier holen. Schreibe die Schritte ** in Worte **, die du befolgen musst, um dieses Problem zu lösen. Es hilft, wenn Sie darüber nachdenken, wie Sie das von Hand machen würden. Verwenden Sie Peters Vorschläge, um Ihnen den Einstieg zu erleichtern. –

Antwort

0

Ich glaube, das sollte Werke:

#include <stdio.h> 
int main() 
{ 
    int i = 0; 
    char count = 0; 
    char max = 0; 
    char hexDigit = -1; 
    char answer; 
    unsigned long long x = 0xABCDFFFF43FF42CF; 

    for (i = 0; i < 16; i++) 
    { 
     char curr = (x>>(4*i)) & 0xF; 
     if (curr==hexDigit) // checking bits to see if they match previous hex digit 
     { 
      count++; // count increases if they are the same 
     } 
     else 
     { 
      count = 1; 
      hexDigit = curr; 
     } 

     if (count > max) 
     { 
      max = count; 
      answer=hexDigit; 
     } 
    } 

    printf("Hex digit %x occured %d times\n", answer, max); 
} 
+0

fast funktioniert. Es zeigt eine Nummer 1 weniger als die tatsächliche Menge an Vorkommen an. – izzleskizzle

+0

Entschuldigung, was meinen Sie damit, dass eine Zahl 1 weniger als die tatsächliche Anzahl von Vorkommen anzeigt? – algojava

+0

Es tut mir leid, ich hatte count = 0 in der else-Anweisung statt 1. Ihre Antwort funktioniert. – izzleskizzle

Verwandte Themen