单链表实现大数阶乘

本文介绍如何使用单链表结构实现大数阶乘的计算。每个链表节点存储一个3位数,从头节点开始进行进位和乘法运算。在处理结果时,确保每个节点的值都是三位数,不足则在前面补0。
摘要由CSDN通过智能技术生成

单链表通过结构体表示

struct ListNode
{
	int data;
	ListNode* next;
	ListNode(int data) {
		this->data = data;
		this->next = nullptr;
	}
};
typedef ListNode* List;

大数阶乘的函数

思路:链表的每一个结点存储一个3位数的值,每次从头结点开始进位与计算,其他的和乘法一样,最后处理结果时,如果某一结点的值不是三位数需要在前面补0补成三位数

string Solution::bigNumFactorial(int n)
{
	string result = "";

	List num = new ListNode(n);
	List temp;

	while (n >= 2) { // n = 2 之后进入循环只需要处理进位就行了
		n--;
		// 调整进位
		temp = num;
		while (temp != nullptr) {
			if (temp->data > 999) {
				if (temp->next == nullptr) {
					temp->next = new ListNode(temp->data / 1000);
				}
				else {
					temp->next->data += temp->data / 1000;
				}
				temp->data = temp->data % 1000;
			}
			temp = temp->next;
		}
		temp = num;
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值