资源描述:
《多小数位高精度算法.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、两个数相乘,小数点后位数没有限制,请写一个高精度算法记录下用于大数操作的思想:字符串!!算法提示: 输入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)变为整数求就行了.输入的时候记一下,小数点位置..输出再做点文章
2、就行了.下面的是大整数的运算.#includeusingnamespacestd;#defineMAX10000structNode{ intdata; Node*next;};voidoutput(Node*head){ if(!head->next&&!head->data)return; output(head->next); cout<data;}voidMul(char*a,char*b,intpos) { char*ap=a,*bp=b; Node*head=0; head=newNode;head->data=0,
3、head->next=0; //头 Node*p,*q=head,*p1; inttemp=0,temp1,bbit; while(*bp) //若乘数不为空,继续. { p=q->next;p1=q; bbit=*bp-48; //把当前位转为整型 while(*ap
4、
5、temp) //若被乘数不空,继续 { if(!p) //若要操作的结点为空,申请之 { p=newNode;
6、 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; //被乘数到下一位 }
7、 ap=a;bp++;q=q->next; //q进下一位 } p=head; output(p); //显示 cout<next; deletehead; head=p; }}intmain(){ cout<<"请输入两个数"<8、; cin.getline(test2,MAX,''); Mul(strrev(test1),strrev(test2)); system("PAUSE"); return0;}上面大整数已经写了.你加几个东西就行了.#includeusingnamespacestd;#defineMAX10000structNode{ intdata; Node*next;};voidoutput(Node*head,intpos){ if(!head->next&&!head->data)return; output(head->next,pos-1); cou
9、t<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