Gửi Thông Điệp Yêu Thương vanbinh_bt nhắn với all: thi sao rồi mấy đồ...[Mr]-Boom nhắn với All K4: Chúc mọi người có 1 kỳ thi thật tốt !!lặng lẽ yêu nhắn với nguyễn ngọc huy: chúc mi có một kỳ thi tốt nha. vẫn nhớ mingocthongcctm05f nhắn với QNGAI: hãy sát cánh bên nhau.....hi.......trinhvh91 nhắn với TM03B: TM03B đoàn kết đi chơi cuối khóa nghenNgười vô cảm nhắn với nguyenlu: Ai vậy? T vẫn bước đi trong yêu thương mà ^^381 nhắn với neyugn: mong rằng chúng ta sẽ đi đến cái đích cuối cùng !nguyenlu nhắn với Người vô cảm: Hãy bước đi trong sự yêu thươnglenguyen_alone nhắn với Young Bin: tại sao nhok lại iu bin chứ nhỉ???hp thành công nhá!!binhcaolinh nhắn với Đen Trần: Cố gắng học chăm chỉ nhé em! Gửi Thông Điệp Yêu Thương


BẢNG GIÁ QUẢNG CÁO TẠI DIỄN ĐÀN 2MIT.ORG 2012

Hiện kết quả từ 1 tới 4 của 4

Chủ đề: Thuật toán nhân số nguyên lớn

  1. #1
    Tham gia ngày
    Sep 2009
    Đến từ
    LT3C Co., Ltd
    Tuổi
    21
    Bài gửi
    1,635
    Cảm ơn
    1,170
    Được cảm ơn 1,245/499 bài viết
    Blog Entries
    10
    8
    MASTER
     
     
    Số lần cộng|trừ: 3 lần

    Default Thuật toán nhân số nguyên lớn

    Khi cài đặt thuật toán này phần lớn các bạn gặp vấn đề là làm sao để thêm số 0 vào trước chuỗi có độ dài n lẻ và làm thế nào để thêm số 0 trước số có độ dài ngắn hơn để 2 chuỗi số bằng nhau.

    Đoạn chương trình sau sẽ giải quyết 2 vấn đề cơ bản trên, sau khi thu được 2 chuỗi có độ dài bằng nhau và độ dài n chẵn, việc còn lại là của các bạn: Viết thuật toán nhân 2 số nguyên lớn.

    Code:
    #include<iostream>
    #include<string.h>
    #include<ctype.h>
    #include<stdlib.h>
    using namespace std;
    char x[100],y[100];
    void xulychuoi(char x[],char y[],int &n)
    {
        if(n%2!=0)
        {
            char ss[2];
            ss[0]='0';
            ss[1]='\0';
            strcat(ss,x);//noi chuoi ss vao x
            strcpy(x,ss);//gan lai chuoi moi cho x
            ss[0]='0';
            ss[1]='\0';
            strcat(ss,y);
            strcpy(y,ss);
            n++;
        }
        ///them 1 so 0 dang truoc neu n le
        ///doan truong trinh duoi  lam do dai 2 chuoi bang nhau
        ///bang cach them cac so 0 vao truoc chuoi ngan hon
        int sx=strlen(x),sy=strlen(y);
        if(sx>sy)
        {
            int i,d=sx-sy;
            ///khoang cach giua do dai x va y
            char s[100];
            for(i=0; i<d; i++)
                s[i]='0';
            s[i]='\0';
            ///chuoi s la chuoi so 0 can them vao dang truoc
            strcat(s,y);///noi chuoi so 0 la s voi y
            strcpy(y,s);///gan s nguoc lai cho y
        }
        else if(sx<sy)
        {
            int i,d=sy-sx;
            char s[100];
            for(i=0; i<d; i++)
                s[i]='0';
            s[i]='\0';
            strcat(s,x);
            strcpy(x,s);
        }
    }
    
    main()
    {
        char tmp[100];
        int n,sx,sy;
        cout<<"\nNhap x: ";
        cin>>tmp;
        strcpy(x,tmp);
        cout<<"\nNhap y: ";
        cin>>tmp;
        strcpy(y,tmp);
        sx=strlen(x);
        sy=strlen(y);
        sx>sy ? n=sx : n=sy;
        xulychuoi(x,y,n);
        cout<<x<<"\n"<<y<<"\n"<<n<<"\n";
    
    }

    --------------------------------------------------
    Xem các chủ đề cùng chuyên mục:


    +2 EXP
    Hãy nghĩ tới những điều tốt đẹp

  2. Thành viên đã cảm ơn integer trong bài viết này là :

    lyvinhr00m (04-03-2011)

  3. #2
    Tham gia ngày
    Sep 2009
    Đến từ
    LT3C Co., Ltd
    Tuổi
    21
    Bài gửi
    1,635
    Cảm ơn
    1,170
    Được cảm ơn 1,245/499 bài viết
    Blog Entries
    10
    8
    MASTER
     
     
    Số lần cộng|trừ: 3 lần

    Default

    Mới code cứng được cho nó chạy sơ bộ đã, phần tiếp theo là áp dụng chia để trị không đệ quy để giải quyết nó.
    Code:
    long mu(int a,int n)
    {
        if(n==1)
            return a;
        else
            return a*mu(a,n-1);
    }
    long karaoke(int n)
    {
        char a[max],b[max],c[max],d[max];
        for(int i=0; i<n/2; i++)
        {
            a[i]=x[i];
            a[n/2]='\0';
        }
        int j=0;
        for(int i=n/2; i<=n; i++)
        {
            b[j]=x[i];
            j++;
            b[n+1]='\0';
        }
    
        for(int i=0; i<n/2; i++)
        {
            c[i]=y[i];
            c[n/2]='\0';
        }
        j=0;
        for(int i=n/2; i<=n; i++)
        {
            d[j]=y[i];
            j++;
            b[n+1]='\0';
        }
        //tach so thanh cong
        cout<<"\n"<<a<<"\n"<<b<<"\n"<<c<<"\n"<<d;
        unsigned long int soa=atoi(a),sob=atoi(b),soc=atoi(c),sod=atoi(d);
        unsigned long int U=soa*soc,V=sob*sod,W=(soa+sob)*(soc+sod);
        cout<<"\n"<<(U*mu(10,n))+((W-U-V)*mu(10,n/2))+V;
    }

    +1 EXP
    Hãy nghĩ tới những điều tốt đẹp

  4. Thành viên đã cảm ơn integer trong bài viết này là :

    lyvinhr00m (05-03-2011)

  5. #3
    Tham gia ngày
    Oct 2010
    Bài gửi
    202
    Cảm ơn
    91
    Được cảm ơn 47/38 bài viết
    3
    Advanced
     
     
    Số lần cộng|trừ: 0 lần

    Default

    thế giải thik rõ hơn không?Hay copy mạng ve

    Có Một Điều Chắc Chắn Là Không Có Gì Là Chắc Chắn Cả...

  6. #4
    Tham gia ngày
    Sep 2009
    Đến từ
    LT3C Co., Ltd
    Tuổi
    21
    Bài gửi
    1,635
    Cảm ơn
    1,170
    Được cảm ơn 1,245/499 bài viết
    Blog Entries
    10
    8
    MASTER
     
     
    Số lần cộng|trừ: 3 lần

    Default

    Là mình tự code nhưng chưa xong, trên mới chỉ là phần chia đôi chuỗi và thêm các số 0 vào trước cho bằng nhau thôi. Sau đó áp dụng Karasuba vào để tính. Nhưng mình thấy cách này có vẻ không hiệu quả lắm.

    Đang thử code lại bằng cách nhân tay. Tức là nhân tay như thế nào, viết code nhân như thế.

    +1 EXP
    Hãy nghĩ tới những điều tốt đẹp

Thông tin về chủ đề này

Users Browsing this Thread

Hiện giờ đang có 1 người xem chủ đề này. (0 thành viên 1 khách)

     

Chủ đề giống nhau

  1. Đáp án bài làm Nguyên lý kế toán( ĐỀ 2)
    By ngoisaobang in forum Thương mại điện tử
    Trả lời: 5
    Bài mới gửi: 10-01-2011, 11:55 AM
  2. 14 câu trắc nghiệm môn Nguyên Lý Kế Toán
    By hoang_b7 in forum Quản trị thông tin Maketting
    Trả lời: 3
    Bài mới gửi: 02-01-2011, 02:12 AM
  3. Xin tài liệu môn Nguyên lý kế toán
    By truongitec in forum Thương mại điện tử
    Trả lời: 5
    Bài mới gửi: 31-12-2010, 10:50 AM
  4. Trắc nghiệm môn Nguyên Lí Kế Toán
    By shine in forum QC và quan hệ cộng đồng
    Trả lời: 4
    Bài mới gửi: 30-12-2010, 06:57 PM
  5. Môn Nguyên Lý Kế Toán - Định khoản giúp mình
    By hoang_b7 in forum Quản trị thông tin Maketting
    Trả lời: 0
    Bài mới gửi: 20-11-2010, 02:42 PM

1718
Lượt xem

Share