⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 multiple.cpp

📁 该算法可以实现任意大小的整数或浮点数的乘法
💻 CPP
字号:
#include <stdio.h>
#include <string.h>
#define MAX 100 
struct Node{ 
    int data; 
    struct Node *next; 
}; 
void output(struct Node *head, int pos) 
{ 
	if(!head) return;
    if(!head->next && !head->data) return;// 
    output(head->next, pos - 1); 
 	printf("%d", head->data); 
 	if(!pos) printf("%s", ".");
} 
void Mul(char* a, char* b)
{
	Node *pHead, *pNode, *pNodeTmp;
	char *aCur, *bCur, *aEnd, *bEnd, *p;	
	int pos;
	if(!(*a) || !(*b)) return;	
	
	pos = 0;
    if(p=strchr(a, '.'))
    {
        pos += strlen(a) - (p - a) - 1; 
        do
        {
            p++;
            *(p-1)=*p;
        }while(*p);
    }        
    if(p = strchr(b, '.'))
    {
        pos += strlen(b) - (p-b) - 1;
        do
        {
            p++;
            *(p-1)=*p;
        }while(*p);
    }  
	
	aCur = aEnd =  a;
	bCur = bEnd =  b;
	while(*(aCur++)) aEnd++;
	while(*(bCur++)) bEnd++;
	aCur = --aEnd;
	bCur = --bEnd;
	
	pHead = new Node;
	pHead->data = 0;
	pHead->next = NULL;	
	pNode = pHead;	
	
	while(aCur >= a)
	{	
		int high = 0;
		bCur = bEnd;
		pNodeTmp = pNode;
		while(bCur >= b || high > 0)
		{
			int tmp = ((bCur >= b) ? (*bCur - '0') * (*aCur - '0') : 0)
						 + pNodeTmp->data + high;
			int low =tmp % 10;			
			high = tmp / 10;								
			pNodeTmp->data = low;
			if(!pNodeTmp->next)
			{
				Node* pNod = new Node;
				pNod->data = 0;
				pNod->next = NULL;
				pNodeTmp->next = pNod;	
				pNodeTmp = pNod;		
			}
			else pNodeTmp = pNodeTmp->next;			
			bCur--;		
		}
		pNode = pNode->next;			
		aCur--;		
	}
	output(pHead, pos);	
}
int main(int argc, char *argv[])
{
	char f[MAX] = "15.51";
	char e[MAX] = "5.8";	
	Mul(f, e);	
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -