C kodu 10^2 işlemini 99 olarak buluyor

ghostrecon

Hectopat
Katılım
18 Şubat 2017
Mesajlar
10
Daha fazla  
Cinsiyet
Erkek
Clion programında yazdığım kodda 10^2 işlemini 99 olarak buluyor. Sorunun ne olduğunu bulamadım. Yardım eder misiniz? (Programlama dili olarak C kullanıyorum.)

C:
Kod

Yığını:

#include <stdio.h>

#include <math.h>




int enBuyukMulayim (int basamak)

{

    int sayi = 0;

    int sayiBasamak[10];

    int sayiDeger = 0;

    int enBuyukMulayim = 0;

    int baslangic;

    int bitis;

    int sayi3 = pow(10,2);



    sayi = (int)pow(10,  (basamak - 1));


    baslangic = pow(10, basamak - 1);

    bitis = pow(10, basamak);



    while (baslangic <= sayi && sayi < bitis)

    {

        int sayi2 = sayi;

        int i = 0;


        while (sayi2 != 0)

        {

            sayiDeger = sayi2 % 10;

            sayi2 /= 10;

            sayiBasamak = sayiDeger;

            i++;

        }


        int toplam = 0 ;

        int carpim = 1;

        int sonuc;


        for (int j = 0; j < basamak; j++)

        {

            toplam += sayiBasamak[j];

            carpim *= sayiBasamak[j];

        }


        sonuc = toplam * carpim;


        if (sonuc == sayi )

        {

            printf("mulayim sayi :%d\n",sayi);

            if (sayi > enBuyukMulayim)

            {

                enBuyukMulayim = sayi;

            }

        }



        sayi++;

    }


    return enBuyukMulayim;

}


int main()

{

    int basamak;


    printf("kac basamakli bir mulayim sayi aranacak:");

    scanf("%d", &basamak);

    int sonuc = enBuyukMulayim(basamak);

    if (sonuc == 0)

        printf("yok");

    else

        printf("en buyuk mulayim :%d",sonuc);


    return 0;

}

Fonksiyonun ismine takılmayın, kitapta böyle yazıyor.

Break pointi, sayi değişkeninin ve baslangic değişkeninin oraya koyarak Debug ederseniz 99 olarak bulduğunu göreceksiniz.

Not: Kodu, 2 PC'de de denedim, sonuç aynı.
 
Son düzenleyen: Moderatör:
C diline çok hakim değilim lakin programınızda floating point error var gibi gözüküyor.

sayi = (int)pow(10, round(basamak - 1))

Bu şekilde bir deneyim. Sorun çözülürse bildirin, açıklamasını yapayım ama çözüleceğinden emin değilim.
 
Programınızı test ettim ve evet, sorun floating point error olmasıymış. pow() metodunda üstleri yuvarlayarak yazarsanız sorun çözülüyor.

[CODE lang="c" title="Test:"]void enBuyukMulayim (int basamak)

{

int sayi = 0;

int sayiBasamak[10];

int sayiDeger = 0;

int enBuyukMulayim = 0;

int baslangic;

int bitis;

int sayi3 = pow(10,2);



sayi = (int)pow(10, round(basamak - 1));


baslangic = pow(10, round(basamak - 1));

bitis = pow(10, basamak);


printf("Sayi: %d \n", sayi);
printf("Baslangic: %d \n", baslangic);
printf("Bitis: %d \n", bitis);





}


int main()

{

int basamak;


printf("kac basamakli bir mulayim sayi aranacak: ");

scanf("%d", &basamak);

enBuyukMulayim(basamak);



return 0;

}[/CODE]

Bu şekilde test ettiğimde sorunsuz bir şekilde çalıştı.
 
Uyarı! Bu konu 5 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Geri
Yukarı