Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 16 kết quả

Đề tài: tìm dãy fibonaci với số lớn???

  1. #1
    Ngày gia nhập
    03 2008
    Bài viết
    126

    Red face tìm dãy fibonaci với số lớn???

    mình có code này
    nó sẻ in ra các số fibonacy
    vd bạn nhập n=9 thì sẻ in ra 9 số fibonacy đầu tiên
    nhưng khi mình nhập n là 1 số lơn
    vd nhập n=99 chẳng hạn thì nó lại chạy sai
    nó chỉ đúng ở nhưng số đầu thôi\
    các bạn giúp mình khắc phục lổi này nha
    code của mình
    Code:
    #include <iostream>
    using namespace std;
    void main()
    {
    	int n,a[100];
    	cout<<"Nhap n: ";
    	cin>>n;
    	for(int i=1;i<=n;i++)
    		a[i]=0;
    	a[1]=1;
    	a[2]=1;
    	for(int j=3;j<=n;j++)
    		a[j]=a[j-1]+a[j-2];
    	for(int k=1;k<=n;k++)
    		cout<<a[k]<<" ";
    	cout<<"\n";
    
    }

  2. #2
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    Đúng là code của bạn đúng theo định nghĩa của số fibonaci. Nhưng vì bạn khai báo kiểu int a[100] (tức các phần tử chỉ được phép đến mức giới hạn của int, mà bạn lại chạy n=99 nên số fibonaci sinh ra lớn hơn cả kiểu int vì thế bị chuyển lại số âm).
    Thế thôi, bạn thử dùng kiểu double cũng cho ra kết quả, nhưng sẽ hiện kết quả theo kiểu double (tât nhiên cũng chỉ đến mức tối đa của double thôi). Tốt nhất là cài đặt số lớn sẽ cho ra kết quả đúng nhất.
    Không biết ghi gì luôn ...

  3. #3
    Ngày gia nhập
    03 2008
    Bài viết
    126

    uhm mình hiểu điều đó
    mình vẩn biết nguyên nhân là do kiêut int của mình
    vấn đề ở đây là mình muốn hỏi cách khắc phục nó
    mình đã thữ kiểu double nhưng cũng ko dc
    mình nghĩ phải có giải pháp cho những vấn đề số lơn như này chứ
    mong dc giai đáp

  4. #4
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    Trích dẫn Nguyên bản được gửi bởi #include# Xem bài viết
    uhm mình hiểu điều đó
    mình vẩn biết nguyên nhân là do kiêut int của mình
    vấn đề ở đây là mình muốn hỏi cách khắc phục nó
    mình đã thữ kiểu double nhưng cũng ko dc
    mình nghĩ phải có giải pháp cho những vấn đề số lơn như này chứ
    mong dc giai đáp
    Bạn đọc kỹ bài viết trên của mình chưa?
    Bạn phải dùng danh dách liên kết cài đặt số lớn và sử dụng nó để giải bài toán của bạn. Search trong diễn đàn có bài viết về Số lớn cài đặt bằng danh sách liên kết đó bạn.
    Không biết ghi gì luôn ...

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

    uhm mình search rồi
    nhưng mà thấy đọc không hiểu gì
    toàn ghi cái gì không á
    các bạn có thể nói rỏ về vấn đề này hơn dc không
    vì minh code thường xuyên xẩy ra hiện tượng tràn số này
    số nhỏ thì ok chứ còn số lớn thì nó chạy sai liền

  6. #6
    Ngày gia nhập
    03 2008
    Nơi ở
    TP HCM
    Bài viết
    30

    Mặc định tìm dãy fibonaci với số lớn???

    Trích dẫn Nguyên bản được gửi bởi #include# Xem bài viết
    void main()
    {
    int n,a[100];
    cout<<"Nhap n: ";
    cin>>n;
    for(int i=1;i<=n;i++)
    a[i]=0;
    a[1]=1;
    a[2]=1;
    for(int j=3;j<=n;j++)
    a[j]=a[j-1]+a[j-2];
    for(int k=1;k<=n;k++)
    cout<<a[k]<<" ";
    cout<<"\n";

    }
    Mình dùng 1 vòng for và khai báo kiểu double thì kết quả vẫn ra đúng mà bạn.
    Đã được chỉnh sửa lần cuối bởi nhocxinh : 10-04-2008 lúc 07:19 PM.

  7. #7
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    Bạn phải học qua môn Cấu trúc dữ liệu và Giải thuật, học về cài đặt Danh sách liên kết đơn và kép. Sau đó bạn mới hiểu rõ hơn về bài cài đặt Số lớn đó. Bạn có thể search tìm cuốn Giải thuật của Lê Minh Hoàng, tiếng việt rất rõ ràng.
    Đọc sẽ hiểu rõ hơn
    Không biết ghi gì luôn ...

  8. #8
    Ngày gia nhập
    03 2008
    Nơi ở
    TP HCM
    Bài viết
    30

    Code:
    #include "stdio.h"
    #include "conio.h"
    
    int main()
    {
    	int n;
    
    	printf("Nhap n: ");
    	scanf("%d",&n);
            //Có thể đặt điều kiện ở đây để chặn n<=0
    	if (n != 1)	printf("1.000000\n");
    	else {
    		printf("1.000000");
    		return 0;
    	}
    	double a = 0;
    	double b = 1;
    	double c ;
    	for (int i=0 ; i<n-1 ; i++ , a = b, b = c) {
    		c = a + b;
    		printf("%lf\n",c);		
    	}	
    	return 0;
    }
    Mình nhập 99 vào vẫn đúng đó bạn!
    Đã được chỉnh sửa lần cuối bởi nhocxinh : 10-04-2008 lúc 07:42 PM.

  9. #9
    Ngày gia nhập
    03 2008
    Bài viết
    126

    Code:
    #include <iostream>
    #include <windows.h>
    using namespace std;
    void main()
    {
    	int flag;
    	int n;
    	double a[100];
    	do
    	{
    		flag=0;
    		do
    		{
    			cout<<"Nhap n: ";
    			cin>>n;
    			if(n<1)
    				system("cls");
    		}
    		while(n<1);
    		for(int i=1;i<=n;i++)
    			a[i]=0;
    		a[1]=1;
    		a[2]=1;
    		for(int j=3;j<=n;j++)
    		a[j]=a[j-1]+a[j-2];
    		for(int k=1;k<=n;k++)
    			cout<<a[k]<<"\n";
    		cout<<"\n";
    		cout<<"Ban co muon tiep tuc hay khong(1.Tiep tuc va 0. Exit): ";
    		cin>>flag;
    		while(flag!=0 && flag!=1)
    		{
    			cout<<"Ban chi dc quyen chon 1 hoac 0."<<"\n";
    			cout<<"Ban co muon tiep tuc hay khong(1.Tiep tuc va 0. Exit): ";
    			cin>>flag;
    		}
    		if(flag==1)
    			system("cls");
    		if(flag==0)
    			cout<<"Hay nhan phim bat ky de exit"<<"\n";
    	}while(flag==1);
    
    }
    đây là code mình sữa lại kiểu double cho mảng a
    thế nhưng khi ra kết quả nó lại xuất ra số+e...

  10. #10
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    Trích dẫn Nguyên bản được gửi bởi #include# Xem bài viết
    Code:
    #include <iostream>
    #include <windows.h>
    using namespace std;
    void main()
    {
    	int flag;
    	int n;
    	double a[100];
    	do
    	{
    		flag=0;
    		do
    		{
    			cout<<"Nhap n: ";
    			cin>>n;
    			if(n<1)
    				system("cls");
    		}
    		while(n<1);
    		for(int i=1;i<=n;i++)
    			a[i]=0;
    		a[1]=1;
    		a[2]=1;
    		for(int j=3;j<=n;j++)
    		a[j]=a[j-1]+a[j-2];
    		for(int k=1;k<=n;k++)
    			cout<<a[k]<<"\n";
    		cout<<"\n";
    		cout<<"Ban co muon tiep tuc hay khong(1.Tiep tuc va 0. Exit): ";
    		cin>>flag;
    		while(flag!=0 && flag!=1)
    		{
    			cout<<"Ban chi dc quyen chon 1 hoac 0."<<"\n";
    			cout<<"Ban co muon tiep tuc hay khong(1.Tiep tuc va 0. Exit): ";
    			cin>>flag;
    		}
    		if(flag==1)
    			system("cls");
    		if(flag==0)
    			cout<<"Hay nhan phim bat ky de exit"<<"\n";
    	}while(flag==1);
    
    }
    đây là code mình sữa lại kiểu double cho mảng a
    thế nhưng khi ra kết quả nó lại xuất ra số+e...
    đồng ý với bạn là chạy với n=99 thì vẫn đúng kết quả như bạn. Nhưng nếu n=1000 chẳng hạn thì có lẽ bạn không thể chạy ra kết quả với kiểu double được. bạn thử xem !!!
    Không biết ghi gì luôn ...

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

  1. Bài tập C In ra các số fibonaci nhỏ hơn n?
    Gửi bởi depzai trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 17-10-2010, 12:58 PM
  2. Tìm giá trị số fibonaci thứ n bằng đệ quy????
    Gửi bởi blue_23 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 09-08-2010, 02:22 AM
  3. Dãy Fibonaci
    Gửi bởi pannaruto trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 12
    Bài viết cuối: 02-01-2010, 11:30 AM
  4. Bài tập C | Tìm số Fibonaci thứ n!
    Gửi bởi nqpbvh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 14
    Bài viết cuối: 25-06-2009, 05:18 PM
  5. In dãy Fibonaci vào tệp
    Gửi bởi kegiaumat055 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 20-12-2008, 08:14 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