C kodu 10^2 işlemini 99 olarak buluyor

ghostrecon

Hectopat
Katılım
18 Şubat 2017
Mesajlar
8
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:

UmutCan01

Picopat
Katılım
28 Ocak 2021
Mesajlar
63
Çözümler
1
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.
 

UmutCan01

Picopat
Katılım
28 Ocak 2021
Mesajlar
63
Çözümler
1
Programınızı test ettim ve evet, sorun floating point error olmasıymış. pow() metodunda üstleri yuvarlayarak yazarsanız sorun çözülüyor.

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;

}

Bu şekilde test ettiğimde sorunsuz bir şekilde çalıştı.
 
Yukarı