Long аритметика (автор Okulov с
Известно е, че аритметични операции, изпълнявани от компютър в ограничен брой битове не винаги е възможно да се получи точен резултат. Освен това, ние се ограничава от размера (величина) номера, с които могат да работят. И ако ние трябва да изпълнява аритметични операции върху много големи числа, например, 30! = 265252859812191058636308480000000?
В такива случаи, ние трябва да се погрижим за представителството на номера в колата и по-точни аритметични операции се извършват по тях.
Числата, които да представляват, че в стандартен вид компютър с данни не е достатъчно брой битове, по-нататък "дълго." Изпълнението на аритметични операции върху тези "дълги" числа се нарича "дълго аритметика".
Организацията работи с "дълги" номера, зависи от начина, по който ще представи в компютъра тези номера. "Long" номер може да се запише, например, с помощта на набор от десетични цифри, броят на елементите в този масив е броят на значещи цифри в "дълги" номер. Но ако искаме да изпълнява аритметични операции върху тези числа, дължината на масива трябва да бъде достатъчно голям, за да го настанят и резултатът е, например, умножение.
Има и други гледки "дълги" номера. Помислете един от тях. Ние представляваме нашите брой
30! = 265252859812191058636308480000000 като:
30! = 2 * (10 4) 8 + 6525 * (10 4) 7 + 2859 * (10 4) + 8121 * (10 4) 5 + 9105 * (10 4) 4 + 8636 * (10 4) 3 + 3084 * (10 4) 2 + 8000 * (10 4) 1 + 0000 * (10 4) 0.
Тази гледна точка предполага идеята за масив, представен в таблица. 1.
Номер на елемент в масив
Алгоритъмът симулира обикновено добавяне на колона, като се започне с най-незначителните битове. И само за по-лесно изпълнение на аритметични операции върху "дълги" номера, използвани машина представителство "назад".
Резултат: C = 3476782713546912.
По-долу е текста на процедурата за допълнение, два "дълги" номера.
Четвъртата задача. Изпълнение на операции за сравнение "дълги" числа (А = В, В, А = В).
Изпълнение на A> B е прозрачен.
Останалите функции се изпълняват чрез функция Eq и повече.
Помогни си сам следващата, по-сложна задача може да се предлага. Необходимо е да се разработи функция, която дава 0, ако А е по-голяма от 1 Б, ако А е по-малко от Б и 2, с равен брой. Въпреки това, сравнението трябва да се направи при отчитане на смяна. За какво става въпрос? Ето един пример. Да предположим, че А е 56784, и В - 634. С изместване наляво на функцията трябва да се каже в позиция 2, което в дългосрочен изместване без това, че А е по-голяма от Б. Друг пример. Ако A е равно на 56 700 и Б - 2 567 и функция смяна трябва да "каже", че цифрите са равни. Разтворът може да бъде, както следва:
Петият предизвикателството. Увеличаването на продължителността на краткосрочен. При кратко разбира тип число LongInt.
Процедурата е много прилича на процедурата за добавяне на двете дълги числа.
Шестият задачата. Изваждане на две дълги числа дадени срязване
Ако концепцията за промяната още не е ясно, оставете го на мира, всъщност, се изисква изваждане дадена промяна в изпълнението на операцията по разделянето. В началото разберете логиката на процедурата за нула срязване.
Едно ограничение: броят, от която е извадена, повече от броя, който се изважда. Работа с "дълги" отрицателни числа, ние не знаем как.
Процедурата ще бъде подобна на процедурите за събиране и умножение, ако не и едно "но" - заемане на няколко от най-маловажният бит вместо трансфера на единица към MSB. Така например, в конвенционалната бройна система, ние се изважда 9 11-1 е заимстван от десетки цифра, а ако извадим 9 от 10 000 - заеми процес по-сложно.
Седмият задачата. Разделяне на две дълги числа, т.е. намиране на цялата част на частното и остатъка.
Напиши оригинала (без да се уточнява) на логиката е лесно. Те са следните:
А след това? След това започват проблемите. Сподели колона са ни учили в училище. Например,
Какво ще правим? На всеки етап се има предвид, бране на брой (1, 3, 5 и т.н.), така че продуктът на този номер от номера на делител дава минимална, но най-близо до номера. Кое от двете? Трудно е да се каже, думите, но е ясно от примера. Защо правим това предвид, нека компютърът прави. Въпреки това, например просто, нека си го оставя за окончателно изпитване на процедурите логически, особено след като броят на "дълги". Нека номер е по-малко Vnbsp * 10, а след това резултатът (число част на отделението) ще бъде една цифра. Например, А е 564 и В - 63 и прост знак система. Нека се опитаме да вземем резултата от номер, но не груба сила, но от разполовяване на сегмента. Нека Down - горната граница на номерата на интервал събрано, нагоре - на интервала, Ost е равен на дивидент.
С = B * ((Първа + До) Div 2)
цялата част на отношението е 78, а останалата част от участък - 27 856 минус 27 612, т.е. 244.
Това е време, за да донесе процедурата. Използваните "тухли": сравнение номера функция (повече) с функцията за смяна и размножаването на кратко дълго (Мул), описани по-горе.
Остава да се справят със стойност смяна на променливата в нашата експозиция Sp. Отново се върнете към нормалния брой система, и се опитват да споделят, например, 635 до 15. Какво ще правим? Отначало ние разделяме 63 до 15 и форма, ние подбираме първата цифра на резултата в ума. Вземете с компютър, което сме научили. Качват - тази цифра е 4, и това е в резултат на значителна цифра. Променете остатък. Ако най-напред, че е 635, а сега станах 35. Извадете като се вземе предвид промяната можем. Отново изберете цифра. Втората цифра на резултата. Това е номер 2 и останалата част от 5. По този начин резултат (цялата част) на 42 г. остатъка от деление 5. Какво ще се промени, ако основата не е 10, а 10 000? Логиката е същата, само в ума да се помисли малко по-трудно, но това имаме и чук, наречена компютър - дори ако той кара ноктите.
Методически препоръки. Представеният тук материал е представен в четири класа в съответствие с известното модел: 10-15 минути представяне на идеите, а след това работата на учениците под ръководството на учител.
Първа професия. Вход, изход и добавяне на дълги номера (задачи 1, 2, 3).
2-ра сесия. сравнение функция (цел 4).
Трета активност. дълги числа умножение и изваждане (задачи 5, 6).
Четвъртия урок. Разделяне на дълги числа (задача 7). Разбира се, тази схема не е догма. В зависимост от нивото на подготовка на студентите за самостоятелно изпълнение може да се извади голяма част от материала. Само ще отбележа, че поради традицията в редица случаи допускат при описването съзнателно грешка. В резултат на всеки ученик трябва да има свой собствен модул за работа с "дълги" номера.
Теми за научни изследвания
1. За да реши проблемите: търсене на най-голям общ делител на две "дълги" номера; Намерете най-малкото общо кратно на две "дълги" номера; вземането на квадратен корен за "дълга" и номера и т.н.
2. "дълги" номера да са отрицателни. Как ще горните стъпки за този случай?
3. За да се съхранява на "дълги" числа масива не се използва, и купа се реализира с помощта на списъка. Промяна на модул работи с "дълги" номера.
Сайта е създаден в uCoz система