CHÀO MỪNG BẠN ĐẾN VỚI DIỄN ĐÀN - WELCOME TO FORUM Thao tác Số nguyên lớn trong C
TRÍ TUỆ TỎA SÁNG
Để xem đầy đủ thông tin trên diễn đàn, hãy đăng nhập, nếu bạn chưa phải là thành viên thì hãy đăng kí


 Thao tác Số nguyên lớn trong C My-Network-icon
TRÍ TUỆ TỎA SÁNG
Để xem đầy đủ thông tin trên diễn đàn, hãy đăng nhập, nếu bạn chưa phải là thành viên thì hãy đăng kí


 Thao tác Số nguyên lớn trong C My-Network-icon

TRÍ TUỆ TỎA SÁNG

Nơi cảm xúc thăng hoa, nơi khởi đầu hạnh phúc, nơi bình yên, khoảng lặng của tâm hồn và nơi chúng ta fall in love

 
Trang ChínhGalleryLatest imagesTìm kiếmĐăng kýĐăng Nhập
Tìm kiếm
 
 

Display results as :
 
Rechercher Advanced Search
Đăng Nhập
Tên truy cập:
Mật khẩu:
Đăng nhập tự động mỗi khi truy cập: 
:: Quên mật khẩu
Top posting users this month
No user
Thời sự

 

  Thao tác Số nguyên lớn trong C

Go down 
Tác giảThông điệp
hongduong
Đại tướng
Đại tướng
hongduong


Tổng số bài gửi : 315
Reputation : 33
Join date : 10/08/2011
Age : 32
Đến từ : Đất Tổ Châu Phong

 Thao tác Số nguyên lớn trong C Empty
Bài gửiTiêu đề: Thao tác Số nguyên lớn trong C    Thao tác Số nguyên lớn trong C EmptyMon Jun 25, 2012 8:57 am

Mình không giới thiệu dài dòng, như các bạn đã biết với các số lớn trong C khi thực hiện các thao tác cộng, trừ, nhân, chia sẽ sảy ra hiện tượng tràn bộ nhớ, gây nhiều lúng túng cho các bạn. Nhưng với việc sử dụng mảng thì vấn đề này được giải quyết khá đơn giản. Hôm rồi mình có sưu tầm trên mạng mấy đoạn code này - code này có nhược điểm là nếu nhập số có số chữ số lớn sẽ mất khá nhiều thời gian vì phải nhập mảng rời nhau (các số cách nhau bằng dấu space ), hôm nay post lên đây, hy vọng giúp ích các bạn...(Các bạn cùng kiểm tra, có gì bổ sung nhé!)

Phần 1: Thao tác toán Cộng

Code:
#include <stdio.h>
#include <conio.h>
int m,n,dem,nho=0,s,i,j,a[100],b[100],c[100]; //Gia su so nguyen lon co 100 chu so; tuy y!
void nhap()
{
    printf("Nhap so chu so cua so nguyen a, m= ");
    scanf("%d",&m);
    printf("Nhap lan luot cac chu so cua a (ngan cach nhau bang space):\n");
    for(i=m-1;i>=0;i--)
        scanf("%d",&a[i]);
    printf("\n\nNhap so chu so cua so nguyen b, n= ");
    scanf("%d",&n);
    printf("Nhap lan luot cac chu so cua b (ngan cach nhau bang space):\n");
    for(i=n-1;i>=0;i--)
        scanf("%d",&b[i]);
    //Buoc 1: Loai bo cac chu so 0 vo nghia o mang a va b
    while((a[m-1]==0)&&(m>0))
        m--;
    if(m==0)
        a[m++]=0;
    while((b[n-1]==0)&&(n>0))
        n--;
    if(n==0)
        b[n++]=0;
    //Buoc 2: Them cac chu so 0 vao dau cua mang co so phan tu be hon
    if(m<n)
        for(i=1;i<=n-m;i++)
            a[m-1+i]=0;
    else
        for(i=1;i<=m-n;i++)
            b[n-1+i]=0;
    if(m<n)m=n;
    else
        n=m;
}
void cong(int *a,int *b) //Buoc 3: Tinh c[i] va nho
{
    for(i=0;i<m;i++)
    {
        c[i]=(a[i]+b[i]+nho)%10;
        nho=(a[i]+b[i]+nho)/10;
    }
    if(nho>0)
        c[m++]=nho;
}
int main()
{
    nhap();
    cong(a,b);
    printf("\n\nTong la: \n");   
    for(i=m-1;i>=0;i--)    //Buoc 4: Xuat ket qua
        printf("%d",c[i]);
    getch();
    return 0;
}

Phần 2: Thao tác phép toán Trừ

Code:
#include <stdio.h>
#include <conio.h>
int m,n,dem,nho=0,i,a[100],b[100],c[100];
void Input()
{
    printf("Nhap so cac chu so cua a: ");
    scanf("%d",&m);
    printf("\nNhap so a (cac chu so cach nhau boi dau space): ");
    for(i=m-1;i>=0;i--)
        scanf("%d",&a[i]);
    printf("\n\nNhap so cac chu so cua b: ");
    scanf("%d",&n);
    printf("\nNhap so b (cac chu so cach nhau boi dau space): ");
    for(i=n-1;i>=0;i--)
        scanf("%d",&b[i]);
    if(m>n)
        for(i=1;i<=m-n;i++)
            b[n-1+i]=0;
    else
        for(i=1;i<=n-m;i++)
            a[m-1+i]=0;
    if(m<n)
        m=n;
    else n=m;
}
bool Sosanh()
{
    i=m-1;
    while((a[i]==b[i])&&(i>=0))
        i--;
    if((i<0)||(a[i]>b[i]))
        return true;
    else
        return false;
}
void Tru(int *a,int *b)
{
    int tam;
    if(!Sosanh())
    {
        printf("-");
        for(i=0;i<n;i++)
        {
            tam=a[i];
            a[i]=b[i];
            b[i]=tam;
        }
    }
    for(i=0;i<m;i++)
        if(a[i]-nho>=b[i])
        {
            c[i]=(a[i]-b[i]-nho)%10;
            nho=0;
        }
        else
        {
            c[i]=(a[i]+10-b[i]-nho)%10;
            nho=1;
        }
        while(c[m-1]==0)
            m--;
        if(m==0)c[m++]=0;
}
int main()
{
    Input();
    Tru(a,b);
    for(i=m-1;i>=0;i--)
        printf("%d",c[i]);
    getch();
    return 0;
}

Phần 3: Thao tác phép toán Nhân

Code:
#include <stdio.h>
#include <conio.h>
int m,n,chdaichung,nho=0,s,i,j,a[100],b[100],c[100];
void Nhan(int *a,int *b)
{
    chdaichung=m+n-1;
    for(i=0;i<chdaichung;i++)
    {
        s=0;
        for(j=0;j<=i;j++)
            s+=a[j]*b[i-j];
        c[i]=(s+nho)%10;
        nho=(s+nho)/10;
    }
    if(nho>0)
        c[chdaichung++]=nho;
}
void Input()
{
    printf("Nhap so cac chu so cua a: ");
    scanf("%d",&m);
    printf("\nNhap so a (cac chu so cach nhau space): ");
    for(i=m-1;i>=0;i--)
        scanf("%d",&a[i]);
    printf("\n\nNhap so cac chu so cua b: ");
    scanf("%d",&n);
    printf("\nNhap so b (cac chu so cach nhau space): ");
    for(i=n-1;i>=0;i--)
        scanf("%d",&b[i]);
    while((a[m-1]==0)&&(m>0))
        m--;
    if(m==0)
        a[m++]=0;
    while((b[n-1]==0)&&(n>0))
        n--;
    if(n==0)
        b[n++]=0;
}
int main()
{
    Input();
    for(i=1;i<=n;i++)
        a[m-1+i]=0; 
    for(i=1;i<=m;i++)
        b[n-1+i]=0;
    Nhan(a,b);
    for(i=chdaichung-1;i>=0;i--)
        printf("%d",c[i]);
    getch();
    return 0;
}

hoặc

Code:
#include<stdio.h>
#include<conio.h>
#include<ctype.h>
#include<string.h>
int n1,n2,n;
int s1[1000],s2[1000];
char s[1000];
void nhan(void);
main()
{
  int i;
 printf("chuong trinh nhan so lon\n");
 printf("so thu nhat: ");
 gets(s);
 n1=strlen(s)-1;
 for (i=0;i<=n1;i++) s1[n1-i]=s[i]-48;
 printf("so thu hai: ");
 gets(s);
 n2=strlen(s)-1;
 for (i=0;i<=n1;i++) s2[n2-i]=s[i]-48;
 printf("\ntich la: ");
 nhan();
 getch();
}
void nhan(void)
{
 int nho,i,bac,tich,j;
 int tong[1000]={0},tg[1000]={0};
 int nmax,ntg;
 n=0;bac=1;tich=1;nho=0;nmax=0;
 for (j=0;j<=n2;j++)
    {
      bac=j;
      for (i=0;i<=n1;i++)
        {
          tich=s1[i]*s2[j]+nho;
          tg[i+bac]=tich%10;
          nho=tich/10;
        }
      ntg=n1+bac;
      while (nho)
          {
        ntg++;
        tg[ntg]=nho%10;
        nho/=10;
          }
      for (i=bac;i<=ntg;i++)
        {
          tong[i]+=tg[i]+nho;
          nho=tong[i]/10;
          tong[i]%=10;
        }
      while (nho)
          {
        ntg++;
        tong[ntg]=tong[ntg]+nho%10;
        nho=nho/10;
          }
      if (ntg>nmax) nmax=ntg;
    }
 for (i=nmax;i>=0;i--) printf("%d",tong[i]);
}

Phần 4: Thao tác toán Chia

Code:
#include <stdio.h>
#include <conio.h>
int m,n,i,j,Tam,d,t,a[100],b[100],c[100];
bool duoc;
bool Sosanh(int *a,int*b,int d)
{
    int i;
    if((a[d-1]!=0)&&(d>0))
        return true;
    for(i=0;i<n;i++)
        if(a[i+d]>b[i])
            return true;
        else 
            if(a[i+d]<b[i])
                return false;
        return true;
}
void Tru(int *a,int*b,int d)
{
    int i,nho;
    nho=0;
    for(i=n-1;i>=0;i--)
        if(a[i+d]-nho<b[i])
        {
            a[i+d]=a[i+d]+10-nho-b[i];
            nho=1;
        }
        else
        {
            a[i+d]=a[i+d]-nho-b[i];
            nho=0;
        }
        if(nho==1)
            a[d-1]--;
}
void Ktraso0()
{
    duoc=true;
    int j=0,k;
    while((b[j]==0)&&(j<n))
        j++;
    if(j==n)
        duoc=false;
    else 
    {
        for(k=j;k<n;k++)
            b[k-j]=b[k];
        n-=j;
    }
    j=0;
    while((a[j]==0)&&(j<m))
        j++;
    if(j==m)
    {
        m=1;a[0]=0;
    }
    else 
    {
        for(k=j;k<m;k++)
            a[k-j]=a[k];
        m-=j;
    }
}
void Chia(int *a,int *b)
{
    if(m>=n)
    {
        if(!Sosanh(a,b,d))
            d++;
        while(d<=m-n)
        {
            Tam=0;
            while(Sosanh(a,b,d))
            {
                Tam++;
                Tru(a,b,d);
            }
            c[t++]=Tam;
            d++;
            if(a[i]==0)
                i++;
        }
        if(t==0)
            c[t++]=0;
    }
    else 
        c[t++]=0;
    while((a[i]==0)&&(i<m))
        i++;
    if(i==m)
        a[--i]=0;
}
int main()
{
    printf("Nhap so cac chu so cua a: ");
    scanf("%d",&m);
    printf("\nNhap so a (cac chu so cach nhau bang space): ");
    for(i=0;i<m;i++)
        scanf("%d",&a[i]);
    printf("\n\nNhap so cac chu so cua b: ");
    scanf("%d",&n);
    printf("\nNhap so b (cac chu so cach nhau bang space): ");
    for(i=0;i<n;i++)
        scanf("%d",&b[i]);
    d=0;
    i=0;
    t=0;
    Ktraso0();
    if(duoc)
    {
        Chia(a,b);
        printf("\nThuong cua phep chia la: ");
        for(j=0;j<t;j++)
            printf("%d",c[j]);
        printf("\nSo du cua phep chia: ");
        for(j=i;j<m;j++)
            printf("%d",a[j]);
    }
    else 
        printf("Chia cho 0!!!! Vui long lam lai....");
    getch();
    return 0;
}
Về Đầu Trang Go down
https://fallinlove.forumvi.com
 
Thao tác Số nguyên lớn trong C
Về Đầu Trang 
Trang 1 trong tổng số 1 trang
 Similar topics
-
» Quê hương: PhúThọ
» Ngôi nhà nhỏ trên thảo nguyên
» Em Trong Mắt Tôi - Nguyễn Đức Cường
» Hạt nhân nguyên tử, nguyên tố, đồng vị
» Cách nhấn trọng âm trong Tiếng Anh

Permissions in this forum:Bạn không có quyền trả lời bài viết
TRÍ TUỆ TỎA SÁNG :: Phòng học tập và trao đổi kinh nghiệm :: Danh mục tài liệu tham khảo :: Tài liệu khoa học tự nhiên :: Công nghệ thông tin-
Chuyển đến