Ondalık bir sayının 7 ile bölünebilir olup olmadığını kontrol etmek için:
Son basamağı silin. 2 ile çarpın ve kalandan çıkarın. Sonuç 7 ile bölünebilirse, orijinal sayı 7 ile bölünebilir.
(ayrıca örneğin burada tanımlanmıştır )
Bu kural manuel bölünebilirlik kontrolü için iyidir. Örneğin:
2016 7 ile bölünebilir mi?
6*2
201'den çıkarma ; biz 189 olsun. Bu 7 ile bölünebilir mi? Kontrol etmek için kuralı tekrar uygulayalım.
9*2
18 den çıkartın ; 0 alırız. Bu nedenle, 2016 7 ile bölünebilir.
Bu zorlukla mücadelede, bölünebilirlik durumu açık olana , yani sayı 70'den büyük olmayana kadar bu kuralı uygulamalısınız (ancak, ayrıntılar için aşağıya bakınız). Bir işlev veya tam bir program yapın.
Giriş : pozitif bir tamsayı; Kodunuz 32767'ye kadar olan girişleri desteklemelidir (isteğe bağlı hassas tam sayıların desteklenmesi bir bonus; aşağıya bakınız).
Çıktı : 7'ye bölünebilirlik kuralını sıfır veya daha çok kez uygulamanın bir sonucu olan, 70'den büyük olmayan bir tamsayı (muhtemelen negatif).
Test durumları:
Input Output Alternative output
1 1
10 10 1
100 10 1
13 13 -5
42 42 0
2016 0
9 9
99 -9
9999 -3
12345 3
32767 28 -14
---------- Values below are only relevant for the bonus
700168844221 70 7
36893488147419103232 32 -1
231584178474632390847141970017375815706539969331281128078915168015826259279872 8
İki olası çıkış belirtildiğinde, sonuçlardan biri doğrudur: ikincisi kuralın bir kez daha uygulanmasına karşılık gelir. Kuralı tek haneli bir sayıya uygulamak yasaktır: rakamı silerseniz hiçbir şey (0 değil) kalır.
Bonus : Eğer algoritmanız varsa
- İsteğe bağlı hassas tam sayıları destekler
- Girişte yalnızca bir geçiş gerçekleştirir
- Alan karmaşıklığına sahiptir
o(n)
(yani daha azO(n)
); ve - Zamanın karmaşıklığı var
O(n)
,
nerede n
ondalık basamak sayısıdır:
Kodunuzun bayt sayısından% 50 çıkarın.
Gerçek bonus :
Ek olarak, eğer algoritmanız girdiyi normal yönde okursa, en önemli basamaktan başlayarak, bir kez daha% 50'yi çıkarın - puanınız bayt sayınızın% 25'idir (bu mümkün gibi görünüyor, ama kesinlikle emin değilim).
1000000000000000000001
.
long long
yerleşik bir eşdeğer tür veya dil varsa ?