加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数运算,队列实现大数加法乘法

发布时间:2020-12-14 03:09:04 所属栏目:大数据 来源:网络整理
导读:以下代码可进行大数加法,乘法的计算 【代码】: #includecstdio#includecstring#includequeue#includestackusing namespace std;const int mod=10000;//万进制queueint getnum(char str[])//把字符串转化成队列型大数 {queueint q;int len=strlen(str),num=


以下代码可进行大数加法,乘法的计算

【代码】:

#include<cstdio>
#include<cstring>
#include<queue>
#include<stack>
using namespace std;
const int mod=10000;//万进制
queue<int> getnum(char str[])//把字符串转化成队列型大数 
{
	queue<int> q;
	int len=strlen(str),num=0,k=1;
	for(int i=len-1;i>=0;i--)
	{
		num+=k*(str[i]-'0');
		k*=10;
		if(k>=mod||i==0)
		{
			q.push(num);
			num=0; k=1;
		}
	}
	return q;
}
void printnum(queue<int> q)//输出队列大数 
{
	stack<int> s;
	while(!q.empty())
	{
		s.push(q.front());
		q.pop();
	}
	int flag=1;
	while(!s.empty())
	{
		if(flag)printf("%d",s.top());
		else printf("%04d",s.top());
		s.pop();
		flag=0;
	}
	printf("n");
}
queue<int> add(queue<int> q1,queue<int> q2)//加 
{
	queue<int> sum;
	int flag=0;//进位
	while(!q1.empty()||!q2.empty())
	{
		int num1=0,num2=0;
		if(!q1.empty()){
			num1=q1.front();
			q1.pop();
		}
		if(!q2.empty()){
			num2=q2.front();
			q2.pop();
		}
		sum.push(flag+(num1+num2)%mod);
		flag=(num1+num2)/mod;
	}
	if(flag)
		sum.push(flag);
	return sum;
}
queue<int> multi(queue<int> q1,queue<int> q2)//乘 
{
	queue<int> ans;
	int k=0;
	while(!q2.empty())//模拟手工运算 
	{
		int n=q2.front();  q2.pop();
		queue<int> temp,re=q1;//re暂存q1
		for(int i=0;i<k;i++)
			temp.push(0);
		k++;
		int flag=0;//进位
		while(!re.empty())
		{
			temp.push(flag+(n*re.front())%mod);
			flag=(n*re.front())/mod;
			re.pop();
		}
		if(flag)
			temp.push(flag);
		ans=add(ans,temp);//累加
	}
	return ans;
}
int main()
{
	char a[1000],b[1000];
	puts("Input two num:");
	scanf("%s%s",a,b);
	queue<int> numa=getnum(a);
	queue<int> numb=getnum(b);
	printf("相加得:n");
	printnum(add(numa,numb));
	printf("相乘得:n");
	printnum(multi(numa,numb));
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读