即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

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

编程语言 winter2121 14℃ 0评论


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

【代码】:

#include
#include
#include
#include
using namespace std;
const int mod=10000;//万进制
queue getnum(char str[])//把字符串转化成队列型大数 
{
 queue 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 q)//输出队列大数 
{
 stack 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 add(queue q1,queue q2)//加 
{
 queue 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 multi(queue q1,queue q2)//乘 
{
 queue ans;
 int k=0;
 while(!q2.empty())//模拟手工运算 
 {
  int n=q2.front();  q2.pop();
  queue temp,re=q1;//re暂存q1
  for(int i=0;i numa=getnum(a);
 queue numb=getnum(b);
 printf("相加得:\n");
 printnum(add(numa,numb));
 printf("相乘得:\n");
 printnum(multi(numa,numb));
}




转载请注明:CodingBlog » 大数运算,队列实现大数加法乘法

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情