什么是万进制?
今天在写数论的大数的时候。在练习java。后来发现大数也可以采用万进制解决。
什么是万进制。
万进制和二进制啊,八进制,十进制,十六进制等差不多。
举个例子:
我们计算107223432 * 14的式子;
十进制计算起来很简单。
看看万进制的式子:
我们万进制存储在数组中,每个数组存四位。从低位开始存起。
- 1.存数
a[0] = 3432;
a[1] = 0722 = 722;
a[2] = 0001 = 1;
这样存储下来就需要三位。
- 2.运算
然后我们进行乘法运算。从低位开始运算起:
a[0] * 14 = 3432 * 14 = 48048;
- 再考虑进位问题
48048 / 10000 = 4;所以进位为4;
则a[0] = 48048 % 10000 = 8048;**
同理我们处理a[1], a[2];
在计算a[1]的时候,因为a[0]产生了进位4;
a[1] = 722 * 14 + 4(低位产生的进位)= 10112;
那么a[1]产生的进位:a[1] % 10000 = 1;进位为1;
a[1] = 10112 % 10000 = 112;
a[2] = 1 * 14 + 1(a[1]产生的进位)= 15;
a[2] = 15 % 10000 = 15;
a[2]的进位为0
- 输出
从高位a[2]开始输出(输出地方注意:最高位输出原数,其他位如果小于1000,(为啥是1000,因为1000是最小的四位数)那么占四位输出,不足补0)
我们的输出为:15 0112 8048
千万注意!!不是15 112 8048!!!
这里给出了一个计算阶乘的万进制代码。
a[]存数据。
p表示有多少位。
carr表示进位。
factorial计算阶乘。
output是输出函数。
部分代码:
int a[10001];
int p, carr;
void factorial(int n)
{
a[0] = 1;
p = 0;
for (int i = 1; i <= n; i++)
{
carr = 0;
for (int j = 0; j <= p; j++)
{
a[j] = a[j] * i + carr;
carr = a[j] / 10000;
a[j] %= 10000;
}
if (carr > 0)
{
p++;
a[p] = carr;
}
}
}
void output()
{
cout << a[p];
for (int i = p - 1; i >= 0; i--)
{
cout << setw(4) << setfill('0') << a[i];
}
cout << endl;
}