Натуральное число можно записать так: , где 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