两数相乘算法,输入的数字为string类型

这篇博客详细介绍了如何解决腾讯笔试中的一道两数相乘题目,重点在于处理字符串表示的整数相乘。通过链表存储乘积的每一位,利用指针p、p1和Linehead进行动态操作。算法中,p1随着计算不断更新,Linehead用于调整起始位置,以处理不同位数的乘法。博客中提到,通过循环和进位计算,最终得出正确的乘积链表。
摘要由CSDN通过智能技术生成

这是一道腾讯的笔试题,原题有小数点要求。这里只分析下int型的。网上找到一种解法,看过之后表示解法不错,自己敲了一遍并做一些注释。代码在网上随意可以找到,如下:

#include <iostream>   
using namespace std;
#define MAX 10000 

//链表结点
struct Node{
	int data;
	Node *next;
};

//递归输出,其实是链表的逆向输出,因为保存时是
//从个位->十位->...所以输出要逆向
void output(Node *head)
{
	if(!head->next&&!head->data)
		return;
	output(head->next);
	cout<<head->data;
}

void Mul(char *a,char *b)
{
	char *ap = a, *bp = b;
	Node *head = new Node;
	head->data = 0;
	head->next = 0;
	//乘数从低位到高位每一位与被乘数的积起始位置逐一++
	Node *Linehead = head;
	Node *p,*p1;
	//temp为相乘的进位,temp1为当前计算的乘数,bbit保存char转化的int数字
	int temp = 0,temp1,bbit;
	while(*bp) //若乘数不为空
	{
		p = Linehead->next;
		p1 = Linehead;
		bbit = *bp-48;
		while(*ap||temp) //若被乘数不为空或者有进位
		{
			if(!p)
			{
				p = new Node;
				p->data = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值