• <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 閱讀(7692) 評論(0)  編輯 收藏 引用 所屬分類: C++代碼

            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            導航

            統計

            常用鏈接

            留言簿

            文章分類

            文章檔案

            收藏夾

            搜索

            最新評論

            久久福利资源国产精品999| 久久久久综合国产欧美一区二区| www.久久热| 久久九九兔免费精品6| 伊人久久国产免费观看视频| 香蕉久久永久视频| 久久婷婷五月综合色奶水99啪| 99久久精品九九亚洲精品| 一级做a爰片久久毛片16| 久久精品天天中文字幕人妻| 久久成人精品视频| 久久久中文字幕日本| 久久se精品一区二区影院 | 国产精品无码久久四虎| 久久人人爽人人爽人人片AV东京热 | 久久精品国产一区二区三区| 久久夜色精品国产亚洲| 久久WWW免费人成一看片| 色妞色综合久久夜夜| 久久综合欧美成人| 无码人妻久久一区二区三区蜜桃| 中文成人无码精品久久久不卡 | 色综合久久久久网| 中文字幕成人精品久久不卡| 日韩久久无码免费毛片软件| 国产精品中文久久久久久久| 久久水蜜桃亚洲av无码精品麻豆| 2021久久国自产拍精品| 精品久久久久久无码中文字幕| 色婷婷综合久久久久中文字幕| 久久婷婷激情综合色综合俺也去| 伊人丁香狠狠色综合久久| 亚洲人成无码www久久久| 国内精品人妻无码久久久影院| 人妻无码精品久久亚瑟影视 | 亚洲伊人久久综合中文成人网| 亚洲乱码中文字幕久久孕妇黑人 | 一本色道久久综合狠狠躁| 久久国产福利免费| 久久狠狠爱亚洲综合影院 | 国产产无码乱码精品久久鸭|