Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 7 của 7
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    https://stackoverflow.com/questions/5729203/modifying-underlying-char-array-of-a-c-string-object

    Bạn nên dùng std::vector [IMG]images/smilies/smile.png[/IMG] để có thể dùng cơ số lớn hơn.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Là thế nào ạ , e chưa hiểu lắm.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình là newbie thôi. Mình code trên visual studio 2015 bài này. Khá là dài bạn có thể tham khảo.

    Mã:
    #include<stdio.h>#include<conio.h>#include<iostream>char *tong2so(char a[], char b[]){    char *p = new char[21];    int x[20];    int y[20];    int z[22];    for (int i = 0; i < 20; i++) // Scan chuyển đổi chuỗi vào 2 mảng kiểu int để tính toán. Ví dụ kiểu char là kí tự 1 thì đổi thành số 1    {        if (a[i] == 48) x[i] = 0;        if (a[i] == 49) x[i] = 1;        if (a[i] == 50) x[i] = 2;        if (a[i] == 51) x[i] = 3;        if (a[i] == 52) x[i] = 4;        if (a[i] == 53) x[i] = 5;        if (a[i] == 54) x[i] = 6;        if (a[i] == 55) x[i] = 7;        if (a[i] == 56) x[i] = 8;        if (a[i] == 57) x[i] = 9;        if (b[i] == 48) y[i] = 0;        if (b[i] == 49) y[i] = 1;        if (b[i] == 50) y[i] = 2;        if (b[i] == 51) y[i] = 3;        if (b[i] == 52) y[i] = 4;        if (b[i] == 53) y[i] = 5;        if (b[i] == 54) y[i] = 6;        if (b[i] == 55) y[i] = 7;        if (b[i] == 56) y[i] = 8;        if (b[i] == 57) y[i] = 9;    }    int check = 0; // Kiểu tra điều kiện cộng có nhớ    for (int i = 19; i >= 0; i--)    {        if (check == 0) // Trường hợp không nhớ        {            if ((x[i] + y[i]) >= 0 && ((x[i] + y[i]) <= 9)) // Tổng hai số lớn hơn bàng 0 và nhỏ hơn bàng 9            {                if (i == 0) z[0] = 0; // trường hợp i==0 phải xét riêng bởi vì nếu x[0]+y[0] > 9 thì thành số có 21 chữ số                z[i+1] = x[i] + y[i];                check = 0;                continue;            }            if ((x[i] + y[i]) > 9)            {                if (i == 0)                {                    z[1] = (a[i] + b[i]) % 10;                    z[0] = ((x[i] + y[i]) / 10) % 10;                    continue;                }                else                {                    z[i + 1] = (x[i] + y[i]) % 10;                    check = 1;                    continue;                }             }        }        else        {            if ((x[i] + y[i] + 1) >= 0 && ((x[i] + y[i] + 1) <= 9))            {                if (i == 0) z[0] = 0;                z[i+1] = x[i] + y[i] + 1;                check = 0;                continue;            }            if ((x[i] + y[i] + 1) > 9)            {                if(i==0)                {                    z[1] = (x[i] + y[i]+1) % 10;                    z[0] = ((x[i] + y[i]+1) / 10) % 10;                    continue;                }                else                {                    z[i + 1] = (x[i] + y[i] + 1) % 10;                    check = 1;                    continue;                }             }        }     }    int i;    if (z[0] == 0) // số cộng được có 20 chữ số    {        for (i = 1; i < 21; i++) // chuyển đổi từ mảng int thành chuỗi char để return        {            if (z[i] == 0) p[i - 1] = 48;            if (z[i] == 1) p[i - 1] = 49;            if (z[i] == 2) p[i - 1] = 50;            if (z[i] == 3) p[i - 1] = 51;            if (z[i] == 4) p[i - 1] = 52;            if (z[i] == 5) p[i - 1] = 53;            if (z[i] == 6) p[i - 1] = 54;            if (z[i] == 7) p[i - 1] = 55;            if (z[i] == 8) p[i - 1] = 56;            if (z[i] == 9) p[i - 1] = 57;        }        p[i-1] = 0; // phần tử để kết thúc sâu    }    else // trường hợp có 21 chữ số    {        for (i = 0; i < 21; i++)        {            if (z[i] == 0) p[i] = 48;            if (z[i] == 1) p[i] = 49;            if (z[i] == 2) p[i] = 50;            if (z[i] == 3) p[i] = 51;            if (z[i] == 4) p[i] = 52;            if (z[i] == 5) p[i] = 53;            if (z[i] == 6) p[i] = 54;            if (z[i] == 7) p[i] = 55;            if (z[i] == 8) p[i] = 56;            if (z[i] == 9) p[i] = 57;        }        p[i] = 0;// phần tử kết thúc sâu    }    return p;}void main(){    char a[] = "95132546251235874562";    char b[] = "25132645621664116266";    std:: cout <<tong2so(a, b);    _getch();}

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Dùng thư viện BigNum, BigInteger !
    //
    Nó là open source, có trong Java, C và Delphi.

    Phát minh lại cái đã có để làm gì ? Học theo cái người ta làm có hơn không !

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình nghĩ là lm những bài này để học tư duy lập trình thôi.

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi D.A.K0001
    E mới học chuỗi .Mọi người có thể chỉ cho e code sai ở đâu được không ạ.[IMG]images/smilies/17.gif[/IMG][IMG]images/smilies/17.gif[/IMG]
    http://codepad.org/JdoCRrLE
    Đổi lại vấn đề, tìm hiểu thư viện BigNum, BigInt - viết CT dùng thư viện BigNum, BigInt để thực hiện các phép tính trên số lớn.

    https://sourceforge.net/projects/cpp-bigint/

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •