• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            兩個數相乘,小數點后位數沒有限制,請寫一個高精度算法【轉】

            算法提示:

                      輸入 string a, string b; 計算string c=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)

            du51(郁郁思揚)的答案:


            變為整數求就行了.輸入的時候記一下,小數點位置..輸出再做點文章就行了.
            下面的是大整數的運算.
            #include<iostream>
            using namespace std;
            #define MAX 10000
            struct Node{
               int data;
               Node *next;
            };
            void output(Node *head)
            {
               if(!head->next&&!head->data)return;
               output(head->next);
               cout<<head->data;
            }
            void Mul(char *a,char *b,int pos)        
            {
               char *ap=a,*bp=b;
               Node *head=0;
               head=new Node;head->data=0,head->next=0;   //頭
               Node *p,*q=head,*p1;
               int temp=0,temp1,bbit;
               while(*bp)                //若乘數不為空 ,繼續.
               {
                   p=q->next;p1=q;
                   bbit=*bp-48;          //把當前位轉為整型
                   while(*ap||temp)            //若被乘數不空,繼續
                   {
                       if(!p)            //若要操作的結點為空,申請之
                       {
                           p=new Node;
                           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);                   //顯示
               cout<<endl;
               while(head)                 //釋放空間
               {
                       p=head->next;
                       delete head;
                       head=p;
               }
            }
            int main()
            {
               cout<<"請輸入兩個數"<<endl;
               char test1[MAX],test2[MAX];
               cin.getline(test1,MAX,'\n');
               cin.getline(test2,MAX,'\n');
               Mul(strrev(test1),strrev(test2));
               system("PAUSE");
               return 0;
            }
            上面大整數已經寫了.你加幾個東西就行了.
            #include<iostream>
            using namespace std;
            #define MAX 10000
            struct Node{
               int data;
               Node *next;
            };
            void output(Node *head,int pos)
            {
               if(!head->next&&!head->data)return;
               output(head->next,pos-1);
               cout<<head->data;
               if(!pos)cout<<".";
            }
            void Mul(char *a,char *b,int pos)        
            {
               char *ap=a,*bp=b;
               Node *head=0;
               head=new Node;head->data=0,head->next=0;   //頭
               Node *p,*q=head,*p1;
               int temp=0,temp1,bbit;
               while(*bp)                //若乘數不為空 ,繼續.
               {
                   p=q->next;p1=q;
                   bbit=*bp-48;          //把當前位轉為整型
                   while(*ap||temp)            //若被乘數不空,繼續
                   {
                       if(!p)            //若要操作的結點為空,申請之
                       {
                           p=new Node;
                           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);                   //顯示
               cout<<endl;
               while(head)                 //釋放空間
               {
                       p=head->next;
                       delete head;
                       head=p;
               }
            }
            int main()
            {
               cout<<"請輸入兩個數"<<endl;
               char test1[MAX],test2[MAX],*p;
               int pos=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");
               return 0;
            }

             

            本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/hanlin1985/archive/2008/10/10/3048605.aspx

            posted on 2011-06-07 10:25 Hsssssss 閱讀(7696) 評論(0)  編輯 收藏 引用 所屬分類: C++代碼

            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            導航

            統計

            常用鏈接

            留言簿

            文章分類

            文章檔案

            收藏夾

            搜索

            最新評論

            久久激情亚洲精品无码?V| 久久精品国产清高在天天线| 狠狠人妻久久久久久综合| 欧美日韩精品久久久免费观看| 久久高潮一级毛片免费| 国产色综合久久无码有码| 色成年激情久久综合| 亚洲国产天堂久久综合| AV无码久久久久不卡网站下载| 久久国产精品国语对白| 久久中文骚妇内射| 国产成人综合久久精品红| 国产精品一区二区久久精品| 久久久精品久久久久影院| 99久久99这里只有免费的精品| 综合久久一区二区三区| 亚洲国产精品久久久久网站 | 国内精品伊人久久久久av一坑| 色综合色天天久久婷婷基地| 久久久久久伊人高潮影院| 狠狠色伊人久久精品综合网| 91精品国产色综合久久| 五月丁香综合激情六月久久| 人妻无码αv中文字幕久久琪琪布| 99久久夜色精品国产网站| 国产一区二区三区久久精品| 韩国免费A级毛片久久| 久久久亚洲欧洲日产国码aⅴ| 久久久无码精品亚洲日韩京东传媒 | 久久人人爽人人爽人人av东京热| 国内精品伊人久久久久影院对白| 国产成人精品白浆久久69| 国产精品岛国久久久久| 午夜欧美精品久久久久久久| 99久久国产亚洲综合精品| 亚洲国产成人久久一区WWW| 日日狠狠久久偷偷色综合96蜜桃| 欧美亚洲日本久久精品| 久久精品国产亚洲Aⅴ香蕉| 久久国产综合精品五月天| 中文字幕亚洲综合久久菠萝蜜|