ГЛАВА 3. Позиционная запись числа

Натуральное число можно записать так: , где ai – цифра в i –ой позиции. При работе с натуральными числами основными являются два алгоритма [26]:

§ выделение последней цифры;

§ удаление этой цифры из числа.

Используя операции получения остатка и частного от деления на 10, можно последовательно получить все цифры числа. Кроме того, при разработке алгоритмов используется представление числа через его цифры в виде суммы:

= an ·10 n + an -1·10 n -1+…+ a 2·102 + a 1·101+ a 0·100. (3.1)

Листинг 3.1. Дано натуральное n. Заменить в этом числе порядок цифр на обратный. Новое число обозначить через nn. Выделяя последовательно цифры ai числа n, как остаток от деления на 10, перенести их в новое число nn= nn ·10+ ai.

//L3_1.cpp

#include <iostream>

using namespace std;

int main()

{

setlocale(LC_CTYPE,"russian");

int n, nn;

do

{

cout << "Введите натуральное число ";

cin >> n;

}while (n <= 0);

nn = 0;

while (n > 0)

{

nn = nn*10+n%10;

n/ = 10;

}

cout << "Полученное число "<<nn<<'\n';

return 0;

}

Результат работы программы листинга 3.1 приведен на рис. 3.1:

Рис. 3.1. Результат работы программы листинга 3­.1

Листинг 3.2. Дано натуральное число n. Удалить из записи этого числа цифры 5 и 0, оставив остальные в том же порядке, что и в исходном числе. Для этого воспользоваться записью числа в виде разложения с использованием цифр и степеней числа 10, представленного формулой (3.1).

//L3_2.cpp

#include <iostream>

using namespace std;

int main()

{

setlocale(LC_CTYPE,"russian");

int n,nn,k = 1,c;

do

{

cout << "Введите натуральное число ";

cin >> n;

}while (n <= 0);

nn = 0;

while (n > 0)

{

c = n%10;

if(c!= 5 && c!= 0)

{

nn = nn+c*k;

k* = 10;

}

n/ = 10;

}

cout << "Полученное число "<<nn<<'\n';

return 0;

}

На рис. 3.2 представлен результат выполнения программы листинга 3.2.

Рис. 3.2. Результат работы программы листинга 3­.2

Листинг 3.3. Найти трехзначное натуральное число, сумма цифр которого равна заданному числу. Прежде всего, следует отметить, что сумма цифр не может превышать 27, так как 9+9+9=27. Кроме того, если предположить, что k, j и i –цифры, то заданное число равно k + j + i.

//L3_3.cpp

#include <iostream>

using namespace std;

int main()

{

setlocale(LC_CTYPE,"russian");

int n,i,j,k;

do

{

cout << "Введите натуральное число <= 27 ";

cin >> n;

}while (n <=0 && n > 27);

for(i=0; i<=9; i++)

for(j=0; j<9; j++)

{

k = n-i-j;

if(k >= 1&& k <= 9)

cout << k+j*10+i*100 << '\n';

}

return 0;

}

Результат работы программы листинга 3.3 приведен на рис. 3.3:

Рис. 3.3. Результат работы программы листинга 3­.3

Листинг 3.4. Определить цифру в последовательности чисел. Например, определить n –ю цифру в последовательности Фибоначчи [4]: 1123581321…. Алгоритм заключается в определении диапазона числа, в котором находится эта позиция. Для этого определяется число позиций текущего числа и наращивается до тех пор, пока это значение меньше исходной позиции. Затем определяется число младших цифр, которые следует убрать из текущего числа, и определяется искомая цифра.

//L3_4.cpp

#include <iostream>

using namespace std;

int main()

{

setlocale(LC_CTYPE,"russian");

int tmp, n, l, dl, m, i1, i2, i3;

do

{

cout << "Введите число n ";

cin >> n;

}while (n <= 0);

i1 = 0;

i2 = 1;

l = 0;

while (n > l)

{

dl = 0;

m = i2;

while (m > 0) // Определяет число

{ // позиций в i2 -

dl++; // текущем числе

m / = 10; // Фибоначчи.

}

l+ = dl;

i3 = i1 + i2;

i1 = i2;

i2 = i3;

}

tmp = l-k;

while (tmp > 0)

{

i2 / = 10;

tmp--;

}

tmp = i1%10;

cout << n<< "-ая цифра = " << tmp << endl;

return 0;

}

На рис. 3.4 представлен результат выполнения программы листинга 3.4.

Рис. 3.4. Результат работы программы листинга 3­.4


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: