在C ++中查找int的最后一位数的最有效方法是什么

时间:2010-06-08 21:52:12

标签: c++

我想尝试编写自己的BigInt类,所以我想知道在C中查找数字的最后一位数的最有效方法是什么,特别是对于一个非常大的int的输入。

3 个答案:

答案 0 :(得分:15)

lastDigit = number % 10;

答案 1 :(得分:4)

我假设您的BigInt使用base-256实现,但这对于base-65536甚至更大的基数同样有效。

从一个简单的例子开始:BigInt(2828)将存储为11 * 256 + 12.现在BigInt(2828)%10 =(11 * 256 + 12)%10 =((11%10)*(256 %10)+ 12%10))%10 =(256%10 + 2)%10 =(6 + 2)%10 = 8.

您将应用的两个基本规则是(a + b)%10 =(a%10 + b%10)%10和(a * b)%10 =(a%10 * b% 10)%10。实际上,不仅256%10 == 6,而且(256 ^ N)%10 =(6 ^ N)%10 = 6.这极大地简化了您的LastDigit()函数。

因此,再次假设BigInt B表示为基数为256的序列d_N..d_0。然后B%10为(6 * sum(d_i%10) - 5 *(d_0%10))%10。每个术语在总和中最多9个,显然。因此,您可以简单地求和(ULONG_MAX / 6)base-256数字而不会溢出,同样仍然适用于base-65536和base-4294967296

答案 2 :(得分:3)

由于您正在处理输入,因此最简单的方法是将其作为字符串读取,并通过减去“0”将最后一个字符转换为数字值。