Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Tính toán số lớn | Nhân số lớn viết trên C

  1. #1
    Ngày gia nhập
    08 2006
    Bài viết
    19

    Post Tính toán số lớn | Nhân số lớn viết trên C

    khửa khửa, em vừa gõ code bài này xong, up lên cho anh em mổ xẻ
    xin lỗi vì code vừa gõ tức thì nên em chưa chỉnh sửa cho đẹp(nói luôn, em vừa up nó lên diễn đàn vietnamnet- không có các bác lại bảo)
    chương trình này thực ra lồng luôn cộng số lớn:
    // phần này nè:for (i=bac;i<=ntg;i++)
    {
    }
    while (nho)
    {
    }
    biến đổi đôi chút là thành trừ số lớn thôi
    chia số lớn thì em sẽ up sau(nếu bác nảo rỗi up luôn, anh em ta cung mổ xẻ)
    PHP 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);
    void main()
    {
      
    int i;
     
    clrscr();
     
    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>nmaxnmax=ntg;
         }
     for (
    i=nmax;i>=0;i--) printf("%d",tong[i]);


  2. #2
    Ngày gia nhập
    03 2009
    Bài viết
    5

    Code nhân hai số lớn viết bằng C
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<ctype.h>
    4. #include<string.h>
    5. int n1,n2,n;
    6. int s1[1000],s2[1000];
    7. char s[1000];
    8. void nhan(void);
    9. void main()
    10. {
    11.   int i;
    12.  clrscr();
    13.  printf("chuong trinh nhan so lon\n");
    14.  printf("so thu nhat: ");
    15.  gets(s);
    16.  n1=strlen(s)-1;
    17.  for (i=0;i<=n1;i++) s1[n1-i]=s[i]-48;
    18.  printf("so thu hai: ");
    19.  gets(s);
    20.  n2=strlen(s)-1;
    21.  for (i=0;i<=n1;i++) s2[n2-i]=s[i]-48;
    22.  printf("\ntich la: ");
    23.  nhan();
    24.  getch();
    25. }
    26. void nhan(void)
    27. {
    28.  int nho,i,bac,tich,j;
    29.  int tong[1000]={0},tg[1000]={0};
    30.  int nmax,ntg;
    31.  n=0;bac=1;tich=1;nho=0;nmax=0;
    32.  for (j=0;j<=n2;j++)
    33.      {
    34.       bac=j;
    35.       for (i=0;i<=n1;i++)
    36.          {
    37.           tich=s1[i]*s2[j]+nho;
    38.           tg[i+bac]=tich%10;
    39.           nho=tich/10;
    40.          }
    41.       ntg=n1+bac;
    42.       while (nho)
    43.            {
    44.         ntg++;
    45.         tg[ntg]=nho%10;
    46.         nho/=10;
    47.            }
    48.       for (i=bac;i<=ntg;i++)
    49.          {
    50.           tong[i]+=tg[i]+nho;
    51.           nho=tong[i]/10;
    52.           tong[i]%=10;
    53.          }
    54.       while (nho)
    55.            {
    56.          ntg++;
    57.          tong[ntg]=tong[ntg]+nho%10;
    58.          nho=nho/10;
    59.            }
    60.       if (ntg>nmax) nmax=ntg;
    61.      }
    62.  for (i=nmax;i>=0;i--) printf("%d",tong[i]);
    63. }

  3. #3
    Ngày gia nhập
    07 2009
    Bài viết
    3

    sao ko up ca bai` ve cong tru` nhan chia so' lon lun nhi~! gom lai 1 bai ay ?

  4. #4
    Ngày gia nhập
    02 2010
    Nơi ở
    Hà Nội
    Bài viết
    1

    Bài này cũng được đấy nhưng vẫn có lỗi nha.
    Nếu nhập số âm vào thì kết quả cho ra sẽ sai thôi, bạn nên có thêm điều kiện s[0]=" - " thì.......

  5. #5
    Ngày gia nhập
    10 2009
    Nơi ở
    Close All
    Bài viết
    993

    Trích dẫn Nguyên bản được gửi bởi melaptrinh Xem bài viết
    khửa khửa, em vừa gõ code bài này xong, up lên cho anh em mổ xẻ
    xin lỗi vì code vừa gõ tức thì nên em chưa chỉnh sửa cho đẹp(nói luôn, em vừa up nó lên diễn đàn vietnamnet- không có các bác lại bảo)
    chương trình này thực ra lồng luôn cộng số lớn:
    // phần này nè:for (i=bac;i<=ntg;i++)
    {
    }
    while (nho)
    {
    }
    biến đổi đôi chút là thành trừ số lớn thôi
    chia số lớn thì em sẽ up sau(nếu bác nảo rỗi up luôn, anh em ta cung mổ xẻ)
    PHP 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);
    void main()
    {
      
    int i;
     
    clrscr();
     
    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>nmaxnmax=ntg;
         }
     for (
    i=nmax;i>=0;i--) printf("%d",tong[i]);

    Góp ý:
    -Sử dụng cấu trúc dữ liệu mảng để lưu trữ số nguyên lớn là không tối ưu.Tốn bộ nhớ.-->Danh Sach Liên Kết.

Các đề tài tương tự

  1. Lập trình C++ lỗi khi viết trên dev c, còn trên cfree chạy bình thường
    Gửi bởi truongvantri trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 26-10-2013, 03:34 PM
  2. Bài tập C các phép tính trên phân số viết bằng C trên Linux. Mọi người sửa giúp mình với?
    Gửi bởi hxt57 trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 2
    Bài viết cuối: 05-10-2011, 06:05 PM
  3. Algorithm Viết code thời khóa biểu viết trên Window Form C# như thế nào?
    Gửi bởi hocphp_1998 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 10
    Bài viết cuối: 12-04-2011, 11:10 PM
  4. Viết code trên Form và viết code trong class có gì khác nhau.
    Gửi bởi hocCsharp trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 21
    Bài viết cuối: 21-01-2011, 10:37 PM
  5. Viết chương trình hiển thị các số từ 00h đến ffh trên dãy dèn LED?
    Gửi bởi hoangtk6 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 03-06-2010, 06:52 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn