Selam arkadaşlar.Bir program yazmak istiyorum ancak işin içinden çıkamadım. C++ programı ile basamak değerleri toplamının kübüne eşit olan dört basamaklı sayıları gösteren program. Mesela: 5832 --> 5+8+3+2=18 18*18*18=5832 gibi. Şimdiden yardımlar için tesekkurler :)
Soruyu cozduk tesekkurler :)
main() { int a=1,b=1,c=1,d=1; //f1 foktoriyel 1... for(a=1;a<=9;a++){ a=a; for (b=1;b<=9;b++){ b=b; for (c=1;c<=9;c++){ c=c; for (d=1;d<=9;d++){ d=d; if (((a*1000)+(b*100)+(c*10)+d)==(a+b+c+d)*(a+b+c+d)*(a+b+c+d)) printf("Aranan Sayi:%d%d%d%d\n",a,b,c,d);
} } } }//Gereksiz system("PAUSE"); return 0; }
Yönteminiz doğru sonuca kötü yolla ulaştırır, evet çözümünüz doğrudur fakat kullanışsızdır.
Siz 10000 kere işlem yapıyorsunuz. Eğer sizden 8 basamaklı sayılar için isteseydi, 100000000 kere işlem yapmanız gerekecekti.
Bunun yerine şöyle düşünün : basamak değerlerini toplayacağımız sayı 10000'den büyük değil. yani sonucumuzun kübü 10000'den büyük olamaz. O zaman:
while (i*i*i<10000) gibi birşey yapabilirsiniz.
Sizin dediğinizdeki döngü sayısı 10000 Benim dediğimde döngü sayısı 21 veya 22.