Да се напише програма, която извежда:
- всички числа, кратни на X, които са по-малки от Y
- всички степени на X, които са по-малки от Y
Да се напише програма, която извежда:
[c] за С++ програми [/c]
[pascal] за паскал [/pascal]
П | В | С | Ч | П | С | Н |
---|---|---|---|---|---|---|
« февр. | ||||||
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Да, това е единия вариант. Има и още един…
Ха, сетил си се и че числото може да е отрицателно, и че ако е 1 програмата ще продължава до безкрай! Браво! Не съм и помислил, че и в тази задача може да има специфични случаи :-) Но сега, като се замисля, трябва да обработиш и число=0, защото и там ще продължава до безкрай.
За смятането на степените има по-оптимален вариант, писах го горе и на Ники. Помислете как от една степен се получава следващата…
Освен проверка за нула съм забравил и проверка дали границата е валидна (в предишното решение ако се въведе нещо различно от число получаваме странни резултати ). Е, вече го има, но не разбирам как ако умножаме числото по себе си ще ми помогне в моето решение. Така както го виждам в момента означава да въведа още една променлива, тъй като „osnowa“ я използвам за кратните числа. Може би някъде пропускам нещо.
Проверките за не-числа ми се виждат малко прекалени. За реална програма може да имат смисъл, но за учебна само усложняват кода. Хубаво е, че си видял в Интернет как става все пак. Виж, другите проверки са си съвсем на място.
А като умножаваме число по себе си печелим от това, че операцията умножение е по-„лека“ от степенуване. Тъй както и за кратните печелим ако събираме, а не умножаваме. Пробвай с всички степени на 3 до да кажем два милиона по двата начина и сравни времето за изпълнение.
Ясно, ще го имам предвид. Предполагам разликата във времето за изпълнение идва от там, че pow(a,b) е фунцкия и отнема повече време за изпълнение, защото се повиква, изчислява се и се връща резултат.
По-скоро от това, че при степен имаме няколко умножения. Всъщност, не съм го тествал, но предполагам, че ще е по-бавно :-) Калояне, и така както го бяхте направили е супер – просто исках да покажа и другия начин. Когато всичко направено е перфектно, обсъждаме незначителни детайли :-)
Ето го и другия вариант с по-голямо бързодействие
Ето едно решение и от мен, базирано на твоето:
Като се замислих, задачата не е лесна – при X 0, 1, и -1 може в зависимост от Y или да нямаме решение, или да имаме безкрайно много. Ако X отрицателно число, но различно от горните, пак имаме безкрайно много решения, защото всички нечетни степени ще са пак отрицателни числа и ще растат надолу до безкрай и все ще са под Y.
Виж ти нещо привидно просто колко проблеми може да създаде :-)