在C ++中,最大的int值是2147483647.因此,大于此值的整数不能作为整数存储和处理。类似地,如果两个正整数的和或乘积大于 2147483647,结果将不正确。
存储和操作大整数的一种方法是将数字的每个单独数字存储在一个数组中。
编写一个程序,输入两个正整数,最多50个数字(它们可以小于50位),并且可以执行输入数字的求和和乘法。
如果数字的总和或乘数超过50位,则输出相应的消息。
您的程序将具有以下功能:
1.一种将数字读入并存储到数组中的功能
2.将两个大输入数相乘并输出结果的函数。
您必须执行成绩学校倍增。您不能简单地将数字转换为整数并乘以。
请帮助乘法。
在没有使用更高级函数的情况下,是否有任何方法可以使用C ++中的数组执行此操作。
答案 0 :(得分:0)
由于您知道最大位数为50,因此您可以使用数组:
const unsigned int MAXIMUM_DIGITS = 50U;
char number_digits[MAXIMUM_DIGITS];
通过保留字符,您不必执行任何除法以从数字中提取数字。
要将字符转换为内部号码,您可以使用:
unsigned int number = number_digit[i] - '0';
或搜索数组:
char decimal_digits[] = "0123456789";
char * p = strchr(decimal_digits, number_digit[i]);
unsigned int number = p - &decimal_digits[0];
数字的乘法保留为OP的练习。
编辑1:乘法
乘法算法是:
unsigned int carry = 0U;
// Multiply the two digits
// The two digits should be unsigned int
unsigned int product = digit_1 * digit_2;
// Add in the carry from a previous multiply
product += carry;
// Calculate carry (overflow) from the product.
carry = product / 10;
// Trim the product to one digit.
product = product % 10;