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ı.
 

Yeni konular

Geri
Yukarı