2016-07-25 8 views
1

Отредактировано:Как применить операцию modulo в массиве char в C?

У меня есть большое число, у которого C не существует для него. Я должен использовать массив символов для его хранения. В качестве примера я создаю 32-байтовый массив. Он представляет собой большое число до 2^256.

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

Я хочу, чтобы применить операцию по модулю на нем, например, я хочу, чтобы моды большого числа на небольшой делитель и получить результат целого типа.

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 

Я не хочу использовать другую библиотеку. Как мне это сделать?

+3

Упоминается, что это имеет мало смысла. Что вы ожидаете от результата? – wasthishelpful

+0

и есть много способов ... вы хотите знать, как преобразовать _string_ в целое число? –

+2

Я подозреваю, что это вопрос о реализации операции '%' в арифметике произвольной точности без использования библиотеки, предназначенной для этой цели. –

ответ

4

Чтобы выполнить Mod в большом количестве, использовать моды один unsigned char (@Bathsheba) за один раз.

% является C Остаток Оператор. Для положительных операндов он имеет такую ​​же функциональность, как 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

Полезный ответ на интересный вопрос, если вы спросите меня. – amn