Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lec_07

.pdf
Скачиваний:
13
Добавлен:
11.05.2015
Размер:
1.57 Mб
Скачать

Продолжение решения 7.3

{распечатка результата}

{старшая тетрада выдается без ведущих нулей } j:=1000;

while (A[Nach] div j)=0 do j:=j div 10; while j<>0 do begin

write(A[Nach] div j); A[Nach]:=A[Nach] mod j; j:=j div 10;

end;

for i:=Nach-1 downto 1 do begin j:=1000;

for j:=1 to 4 do begin write(A[i] div j); A[i]:=A[i] mod j; j:=j div 10;

end end

end.

Задачи…

7.4) Дано два целых положительных числа: a и b. Требуется написать программу, которая находит цифру, на которую оканчивается число a^b.

Решение:

нам надо найти ПОСЛЕДНЮЮ цифру a^b.

На последнюю цифру не влияет никакая цифра, кроме последней цифры числа a^(b-1).

Это упрощает задачу. Каждый раз нам следует возводить в степень ТОЛЬКО ПОСЛЕДНЮЮ цифру и при получении числа большего 9 получать ТОЛЬКО ПОСЛЕДНЮЮ цифру.

Проиллюстрируем на примере:

if b > 1 then

for c := 2 to b do begin

last := last * a;

last := last mod 10;

end;

Задачи…

47

7.5) Составить программу вычисления точного значения n^n, где n>10.

Возможности языков по работе с большими числами

48

Delphi

64 битовое целое число - наибольшее в Delphi . Тип Int64 это 64 битовое целое число со знаком.

Этот размер фиксирован, и не будет изменён в будущих выпусках Delphi.

type Int64 = -9223372036854775808..9223372036854775807;

ВDelphi нет бесзнакового типа 64 битного целого числа.

Функции типа IntToStr поддерживают Int64.

Компиляторы C++

49

типа

Байты

Диапазон значений

 

 

 

int

4

от -2 147 483 648 до 2 147 483 647

 

 

 

__int64

8

От -9 223 372 036 854 775 808

до 9 223 372 036 854 775 807

 

 

 

 

 

unsigned __int64

8

От 0 до 18 446 744 073 709 551 615

 

 

 

unsigned long

4

От 0 до 4 294 967 295

 

 

 

long long

8

От -9 223 372 036 854 775 808

до 9 223 372 036 854 775 807

 

 

 

 

 

unsigned long long

8

От 0 до 18 446 744 073 709 551 615

 

 

 

Особенности long long

50

Чтобы присвоить значение переменной типа long long, необходимо приставить к числу две буквы LL (которые видимо символизируют, что число «longlong» 64-битное).

long long temp = 1100LL;

Если складывать два числа int и результат выйдет за диапазон int, то можно использовать long long.

int a1 = 2000000000; int a2 = 2000000000; long long b = a1 + a2;

// b равен 400000000.

Если мы хотим умножить число типа int а на число типа int b, то всё будет выглядеть так.

long long temp = 0;

for (int i = 0; i < a; i++) { temp += b; }

BigInteger - структура C#

51

Структура c# BigInteger является специальным числовым типом, который дает возможность представлять произвольно большие целые числа без потери точности (введен в .net framework 4.0).

C# не обеспечивает естественную поддержку для BigInteger, поэтому изначально нет возможность отображать литералы BigInteger. Однако, можно неявно выполнить преобразование из любого друго целочисленного типа в BigInteger.

Преимуществом хранения подобных чисел в BigInteger по сравнению с массивом byte является то, что вы получаете семантику значимого типа. Вызов ToByteArray преобразует BigInteger обратно в массив byte.

BigInteger twentyFive = 25;

// не явное преобразование

BigInteger googol = BigInteger.Pow (10, 100);

double g2 = (double) googol;

// явное преобразование

BigInteger g3 = (BigInteger) g2;

 

Console.WriteLine (g3);

 

java.Math

Biglnteger и BigDecimal

52

Для преобразования обычного числа в большое используется статический метод valueOf:

Biglnteger а = Biglnteger.valueof(100);

Методы классов для больших чисел:

Biglnteger с = a.add(b); // с = a + b

Biglnteger d = с.multiply(b.add(Biglnteger.valueOf(2))); // d - с * (b + 2);

java.math.BigInteger

java.mathBigDecimal

- Biglnteger add(Biglnteger other)

-BigDecimal add (BigDecimal other)

- Biglnteger subtract(Biglnteger other)

- BigDecimal subtract (BigDecimal other)

- Biglnteger multiply(Biglnteger other)

- BigDecimal multiply (BigDecimal other)

- Biglnteger divide(Biglnteger other)

- BigDecimal divide (BigDecimal other,

-Biglnteger mod(Biglnteger other)

int roundingMode)

- int compareTo(Biglnteger other)

-int compareTo(BigDecimal other)

- static Biglnteger vaiueOf(long x)

- static BigDecimal vaiueOf (long x)

 

-static BigDecimal vaiueOf (long x, int scale)

Задачи…

Решение задачи

54

#include <cstdio> int main(){

freopen("j7.in","r",stdin);

freopen("j7.out","w",stdout); int a,b,i; scanf("%d%d",&a,&b);

if (a==1)

{

printf("1"); for(i=1;i<=b;i++) printf("0");

} else {

for(i=a;i<=b;i++) printf("9"); for(i=1;i<a;i++) printf("0");

}

puts(""); return 0;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]