多小数位高精度算法

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

两个数相乘,小数点后位数没有限制,请写一个高精度算法记录下用于大数操作的思想:字符串!!算法提示:输入stringa,stringb;计算stringc=a*b;返回c;1,纪录小数点在a,b中的位置l1,l2,则需要小数点后移动位置数为l=length(a)+length(b)-l1-l2-2;2,去掉a,b中的小数点,(a,b小数点后移,使a,b变为整数)3,计算c=a*b;(同整数的大数相乘算法)4,输出c,(注意在输出倒数第l个数时,输出一个小数点。若是输出的数少于l个,就补0)变为整数求就行了.输入的时候记一下,小数点位置..输出再做点文章就行了.下面的是大整数的运算.#includeiostreamusingnamespacestd;#defineMAX10000structNode{intdata;Node*next;};voidoutput(Node*head){if(!head-next&&!head-data)return;output(head-next);couthead-data;}voidMul(char*a,char*b,intpos){char*ap=a,*bp=b;Node*head=0;head=newNode;head-data=0,head-next=0;//头Node*p,*q=head,*p1;inttemp=0,temp1,bbit;while(*bp)//若乘数不为空,继续.{p=q-next;p1=q;bbit=*bp-48;//把当前位转为整型while(*ap||temp)//若被乘数不空,继续{if(!p)//若要操作的结点为空,申请之{p=newNode;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;output(p);//显示coutendl;while(head)//释放空间{p=head-next;deletehead;head=p;}}intmain(){cout请输入两个数endl;chartest1[MAX],test2[MAX];cin.getline(test1,MAX,'\n');cin.getline(test2,MAX,'\n');Mul(strrev(test1),strrev(test2));system(PAUSE);return0;}上面大整数已经写了.你加几个东西就行了.#includeiostreamusingnamespacestd;#defineMAX10000structNode{intdata;Node*next;};voidoutput(Node*head,intpos){if(!head-next&&!head-data)return;output(head-next,pos-1);couthead-data;if(!pos)cout.;}voidMul(char*a,char*b,intpos){char*ap=a,*bp=b;Node*head=0;head=newNode;head-data=0,head-next=0;//头Node*p,*q=head,*p1;inttemp=0,temp1,bbit;while(*bp)//若乘数不为空,继续.{p=q-next;p1=q;bbit=*bp-48;//把当前位转为整型while(*ap||temp)//若被乘数不空,继续{if(!p)//若要操作的结点为空,申请之{p=newNode;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;output(p,pos);//显示coutendl;while(head)//释放空间{p=head-next;deletehead;head=p;}}intmain(){cout请输入两个数endl;chartest1[MAX],test2[MAX],*p;intpos=0;cin.getline(test1,MAX,'\n');cin.getline(test2,MAX,'\n');if(p=strchr(test1,'.')){pos+=strlen(test1)-(p-test1)-1;do{p++;*(p-1)=*p;}while(*p);}if(p=strchr(test2,'.')){pos+=strlen(test2)-(p-test2)-1;do{p++;*(p-1)=*p;}while(*p);}Mul(strrev(test1),strrev(test2),pos);system(PAUSE);return0;}

1 / 4
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功