CNTT4A2 COMMUNITY

Thảo luận học tập


You are not connected. Please login or register

Go downThông điệp [Trang 1 trong tổng số 1 trang]

18/8/2011, 1:50 pm
vungoc
vungoc

Mình đã đọc ở đâu đó bạn Admin có nói đến thi Olympic, mình muốn mở topic này để anh em vào chém gió nhé.
Trong kỹ thuật lập trình chúng ta thường chỉ lập trình với các số bé (khoảng 10^34). Nhưng trong các kỳ thi Olympic mình thấy họ hay ra bài toán giải quyết các số lớn (khoảng vài trăm ....chữ số). Ai giải quyết giúp mình về các vấn đề nhân, chia, cộng, trừ các số lớn nhé.
Mình đã tìm hiểu cái giải thuật này thấy nó hay hay. Ai cho ý kiến nhé:

#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("nnNhap 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("nnTong la: n");
for(i=m-1;i>=0;i--) //Buoc 4: Xuat ket qua
printf("%d",c[i]);
getch();
return 0;
}

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà vungoc
18/8/2011, 2:32 pm
kienhl
kienhl

bạn ơi, ở bài tập trên của bạn nếu cho nhập vào từ bàn phím mà bạn cho các số đầu vào cách nhau bằng dấu phẩy thì khi out put sẽ lỗi khi người ta nhập quá, ví dụ như bạn nhập 12 số nhưng bạn lại nhập 18 số (không báo lỗi lúc nhập giới hạn) khi bạn enter thì kết quả b sẽ không cho nhập nữa, kết quả sai!
bạn xem lại đi nhé, với lại bọn mình học c++, với ngôn ngữ c thì bọn mình không học đâu, nên ko thi olympic môn c! :956785:
http://tin4a2uneti.tk

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà kienhl
18/8/2011, 2:55 pm
vungoc
vungoc

Lạ quá, lạ quá!

1. C và C++ cùng chạy trên 1 môi trường. Nếu lập trình cấu trúc thì 2 thằng như nhau, chỉ khác 1 điều đó là C++ mạnh về hướng đối tượng. Đúng hơn thì nếu học lập trình cấu trúc thì học C hay Pascal còn lập trình hướng đối tượng thì sử dụng C++, Java.
2. Trong lập trình C hay C++ thì việc nhập dữ liệu vào phải được kết thúc bằng Enter, Tab, Space chứ ko phải bằng dấu , hay ; đâu Kiên à. Hơn nữa giải thuật trên theo mình nghĩ thì nó mới đang chú ý đến vấn đề tính toán trong các số lớn chứ việc input hay output thì đó không phải là vấn đề lớn đâu vì mình có thể input, output bằng file mà.
Chúc vui!

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà vungoc
18/8/2011, 7:09 pm
kienhl
kienhl

ơ, mình có bảo là kết thúc bằng dấu phảy đâu nhỉ :):
tớ chạy thử bài của bạn rồi, khi nhập xong 1 chữ số rồi ấn space, lúc mình cho dữ kiện vào là 10 số nhưng mình vẫn bấm đc hơn 10 số mà ko thấy báo gì cả, lúc enter thì nó lỗi ko cho nhập b, vì vậy mình mới bảo bạn xem lại, :4788:
ak, mà mình đang học lập trình huớng đối tượng, có học lập trình cấu trúc đâu, vì vậy phát triển trên c++ nhé! :956785:
http://tin4a2uneti.tk

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà kienhl

Thích

Báo xấu [0]

Gửi một bình luận lên tường nhà Sponsored content

Về Đầu TrangThông điệp [Trang 1 trong tổng số 1 trang]

« Xem bài trước | Xem bài kế tiếp »

Bài viết mới cùng chuyên mục

    Bài viết liên quan với Các thao tác với số lớn!

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

      Bạn không có quyền trả lời bài viết