2016-07-25 34 views
1

Bearbeitet:Wie man Modulo-Operation auf ein Char-Array in C anwenden?

Ich habe eine große Zahl, dass C nicht nativ dafür einen Typ hat. Ich muss ein Char-Array verwenden, um es zu halten. Als Beispiel erstelle ich ein 32-Byte-Array. Es stellt eine große Zahl von bis zu 2^256.

unsigned char num[32]; // The size could be any number for this question. 

Ich mag darauf Modulo-Operation anwenden, zum Beispiel mag ich die große Zahl von einem kleinen Divisor mod und ein Integer-Typ Ergebnis.

int divisor = 1234; // Note that the divisor is much smaller than the big number 
int result; 

// do something here 
// to produce a result 
// like result = number mod divisor 

Ich möchte nicht andere Bibliothek verwenden. Wie kann ich es tun?

+3

Sagte so, es hat wenig Sinn. Was erwarten Sie im Ergebnis? – wasthishelpful

+0

und es gibt viele Möglichkeiten ... Möchten Sie wissen, wie man ein _string_ in eine Ganzzahl konvertiert? –

+2

Ich vermute, das ist eine Frage über die Implementierung der '%' Operation in arbitrary-arithmetischen Berechnungen ohne Verwendung einer Bibliothek für diesen Zweck –

Antwort

4

Um mod eine eine große Anzahl, führen mod einem unsigned char (@Bathsheba) zu einem Zeitpunkt verwendet werden.

% ist C Rest Betreiber. Für positive Operanden hat es die gleiche Funktionalität wie mod.

unsigned mod_big(const unsigned char *num, size_t size, unsigned divisor) { 
    unsigned rem = 0; 
    // Assume num[0] is the most significant 
    while (size-- > 0) { 
    // Use math done at a width wider than `divisor` 
    rem = ((UCHAR_MAX + 1ULL)*rem + *num) % divisor; 
    num++; 
    } 
    return rem; 
} 
+1

Nützliche Antwort auf eine interessante Frage, wenn Sie mich fragen. – amn