题目:实现两个长整数相乘的算法。
此代码可实现任意长度的两个数相乘,实现方法采用单向链表。
以下是我的代码.
备注:此代码有参考网上的代码。
#include "stdafx.h"
#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_Operation(char *str1, char *str2)
{
char *ap = str1;
char *bp = str2;
Node *head = NULL;
head = new Node;
head->data = 0;
head->next = NULL; //头
Node *p,*q = head,*p1;
int temp = 0,temp1,bbit;
while (*bp) //若乘数不为空 ,继续.
{
p = q->next;
p1 = q;
bbit = *bp - 48; //把当前位转为整型
while(*ap||temp) //若被乘数不空,继续
{
if(!p) //若要操作的结点为空,申请之
{
p = new Node;
p->data = 0;
p->next = 0;
p1->next = p;
}
if(*ap == 0)
temp1 = temp;
else
{
temp1 = (p1->data) + (*ap - 48) * bbit + temp;
ap++;
}
p1->data = temp1 % 10; //留当前位
temp = temp1 / 10; //进位以int的形式留下.
p1 = p;
p = p->next; //被乘数到下一位
}
ap = a;
bp++;
q = q->next; //q进下一位
}
p = head;
cout << "The result is: ";
output(p); //显示
cout << endl;
while(head) //释放空间
{
p = head-> next;
delete head;
head = p;
}
}
int main()
{
cout << "请输入两个数" << endl;
char test1[MAX],test2[MAX];
cin >> test1 >> test2;
Mul_Operation(strrev(test1),strrev(test2)); //strrev是字符串反转函数
return 0;
}