什么是万进制?

什么是万进制?

今天在写数论的大数的时候。在练习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;
}
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

娃娃酱斯密酱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值