如何在C中对字符数组应用模运算?

如何在C中对字符数组应用模运算?,c,math,modulo,C,Math,Modulo,编辑: 我有一个很大的数字,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 smalle

编辑:

我有一个很大的数字,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
我不想使用其他图书馆。我该怎么做呢?

要对一个大数字执行mod-an,请一次使用mod-one
unsigned char
()

%
是C的余数运算符。对于正操作数,它具有与相同的功能

要对大数执行mod an,请一次使用mod one
unsigned char
()

%
是C的余数运算符。对于正操作数,它具有与相同的功能


这样说,毫无意义。您希望得到什么结果?有很多方法…您想知道如何将字符串转换为整数吗?我怀疑这是一个关于在不使用用于此目的的库的情况下在任意精度算术中实现
%
运算的问题。我想将字符数组视为一个大数字并应用模。您的第一项工作:改用
无符号字符
char
可以是有符号1的补码。那会把事情搞得一团糟。像这样说,毫无意义。您希望得到什么结果?有很多方法…您想知道如何将字符串转换为整数吗?我怀疑这是一个关于在不使用用于此目的的库的情况下在任意精度算术中实现
%
运算的问题。我想将字符数组视为一个大数字并应用模。您的第一项工作:改用
无符号字符
char
可以是有符号1的补码。这会把事情搞得一团糟。如果你问我一个有趣问题的有用答案。如果你问我一个有趣问题的有用答案。
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;
}