kết quả từ 1 tới 4 trên 4

Phép chia 2 số nguyên lớn

  1. #1
    Ðến Từ
    Yên Bái
    Thành Viên Thứ: 235356
    Giới tính: Nam
    Bài gửi
    746

    Phép chia 2 số nguyên lớn


    ở đây mình làm bằng mảng cho đơn giản
    nhưng bù lại thì sẽ tốn bộ nhớ, làm với số âm dc nhưng phức tạp và chỉ chia lấy phần dư
    đây là code
    2 số nguyên lớn bạn chỉ cần nhập vào số chữ số còn lại con số là ngẫu nhiên
    muốn kết quả đẹp hơn thì sử dụng hàm "xoa0"
    thời gian ở đây sẽ RẤT LÂU nhưng bù lại dc cái đơn giản
    Mã:
    #include<stdio.h>
    #include<time.h>
    #include<stdlib.h>
    #include<conio.h>
    #define MAX 90000
    void test(int a[], int max)
    {
        printf("\n");
        for ( int i = 0 ; i <= max ; i ++)
            printf("%d ",a[i]);
    }
    
    
    void xoa0(int a[], int &m , int max)
    {    
        m = max;
        while(a[0] == 0)
            {
                for (int j = 0 ; j < m ; j ++)
                    a[j]=a[j+1];
                m--;
            }
    }
    int sosanh ( int a[], int b[] , int m)
    {
        int dem=0;
        for (int i = 0 ; i <= m ; i++)
        {
            if(a[i]>b[i])
                return 0;
            if(a[i]<b[i])
                return -1;
            if(a[i]==b[i])
                dem++;
        }
        if (dem == m+1)
            return 1;
    }
    void tinhtoantru(int a[], int n, int b[], int m, int max1, int c[])
    {
        int c2[MAX];
        for( int i = max1 ; i >= 1 ; i --)
            c2[i]=b[i];
        for( int i = max1 ; i >= 1 ; i --)
            {
                if (a[i] < b[i])
                    {
                        a[i] = a[i]+10;
                        c2[i-1]=c2[i-1]+1;
                    }
                c[i]= a[i]-c2[i];
            }
    }
    void chia1(int a[], int n, int b[], int m , int max1)
    {
        int dem=0;
        int c1[MAX];
        while (sosanh(a,b,max1) != -1)
        {
            tinhtoantru(a,n,b,m,max1,c1);
            for ( int i = 0 ; i <= max1  ; i ++)
                a[i] = c1[i];
            dem++;
        }
        
        printf("\kq phep chia la %d",dem);
        printf("\n");
        printf("du la: ");
        for ( int i = 0 ; i <= max1 ; i ++)
            printf("%d ",a[i]);
        
    }
    int main()
    {
        int m,n,max1;
        int a[MAX],b[MAX],c[MAX];
        scanf("%d %d",&n,&m);
        if( m > n)
            max1 = m;
        else max1 = n;
        srand((int)time(NULL));
        for ( int i = max1-n+1 ; i <= max1 ; i ++)
            a[i] = rand()%9+1;
        for ( int i = max1-m+1 ; i <= max1 ; i ++)
            b[i] = rand()%9+1;
        test(a,max1);
        test(b,max1);
    //    xoa0(a,n,max1);
    //    xoa0(b,m,max1);
        printf("\n\n");
        chia1(a,n,b,m,max1);
    
    
        char *_="%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c";
        int __=3**_+5;
        printf("\n\n\t\t\t\t");
        printf(_,__+59,__-32,__-19,__-4,__-21,__-40,__+17,__-7,__-21,__-44,__-19,__-17,__-9,__-15,__-2,__+58);
        getch();
    }
    class TapLamHacker{ private String TráiTim;
    private void Set_TráiTim(String Gái){ this.TráiTim = "Thanh Trâm"; }
    public String Get_TráiTim(){ return "Thanh Trâm"; }
    public String ToString(){return"My love is Thanh Trâm For one future go shopping not concerned about price ";}
    } Liên hệ Skype: Taplamhacker
    Quick reply to this message Trả lời       

  2. 2 thành viên đã cảm ơn taplamhacker:



  3. #2
    Ðến Từ
    Hà Nội
    Thành Viên Thứ: 278100
    Giới tính: Nữ
    Bài gửi
    690

    Reply: Phép chia 2 số nguyên lớn

    Mã:
    char *_="%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c";    int __=3**_+5;
        printf("\n\n\t\t\t\t");
        printf(_,__+59,__-32,__-19,__-4,__-21,__-40,__+17,__-7,__-21,__-44,__-19,__-17,__-9,__-15,__-2,__+58);
    chỗ này đặc sắc thế .
    cơ mà chị chưa hiểu sao í em yêu
    Little Princess KH

  4. #3
    Ðến Từ
    Yên Bái
    Thành Viên Thứ: 235356
    Giới tính: Nam
    Bài gửi
    746

    Reply: Phép chia 2 số nguyên lớn

    Trích Nguyên văn bởi Ngọc Huyền Xem bài viết
    Mã:
    char *_="%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c";    int __=3**_+5;
        printf("\n\n\t\t\t\t");
        printf(_,__+59,__-32,__-19,__-4,__-21,__-40,__+17,__-7,__-21,__-44,__-19,__-17,__-9,__-15,__-2,__+58);
    chỗ này đặc sắc thế .
    cơ mà chị chưa hiểu sao í em yêu
    chữ ký nó bá đạo thế đó chị :V
    a * b thì lấy a+a b lần
    a chia b thì lấy a - b = c
    c > b => a = c thì trừ tiếp tới khi nào c nhỏ hơn b thì c là số dư
    số lần trừ là kết quả phép chia

  5. #4
    Ðến Từ
    Hưng Yên
    Thành Viên Thứ: 425486
    Giới tính: Nam
    Bài gửi
    1

    Reply: Phép chia 2 số nguyên lớn

    Trích Nguyên văn bởi taplamhacker Xem bài viết
    chữ ký nó bá đạo thế đó chị :V
    a * b thì lấy a+a b lần
    a chia b thì lấy a - b = c
    c > b => a = c thì trừ tiếp tới khi nào c nhỏ hơn b thì c là số dư
    số lần trừ là kết quả phép chia
    câu này thực sự hữu ích, cảm ơn b ^^