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

:facebook4:
ở đâ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"
:think: thời gian ở đây sẽ RẤT LÂU nhưng bù lại dc cái đơn giản :v
[AH]
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();
}
[/AH]
 

Ngọc Huyền1

Công Chúa Nhỏ
Mã:
[FONT=Verdana]char *_="%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c";[/FONT]    int __=3**_+5;
    printf("\n\n\t\t\t\t");
[FONT=Verdana]    printf(_,__+59,__-32,__-19,__-4,__-21,__-40,__+17,__-7,__-21,__-44,__-19,__-17,__-9,__-15,__-2,__+58);[/FONT]
chỗ này đặc sắc thế .
cơ mà chị chưa hiểu sao í em yêu :think:
 

taplamhacker

♥ Thanh Trâm ♥
Mã:
[FONT=Verdana]char *_="%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c";[/FONT]    int __=3**_+5;
    printf("\n\n\t\t\t\t");
[FONT=Verdana]    printf(_,__+59,__-32,__-19,__-4,__-21,__-40,__+17,__-7,__-21,__-44,__-19,__-17,__-9,__-15,__-2,__+58);[/FONT]
chỗ này đặc sắc thế .
cơ mà chị chưa hiểu sao í em yêu :think:
:conan: 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 :trangti:
 
:conan: 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 :trangti:
câu này thực sự hữu ích, cảm ơn b ^^
 
Top