Арифметика целых чисел

Переменные

Программы оперируют с данными. Данные хранятся в переменных — специальных областях памяти, отведенных для хранения данных. Каждая переменная имеет свой тип и должна быть объявлена перед использованием. При использовании в программе ранее не объявленной переменной компилятор выдаст сообщение об ошибке вроде

     test.cpp: In function 'int main()':
     test.cpp:5: 'c' undeclared (first use this function)
     test.cpp:5: (Each undeclared identifier is reported only once
     for each function it appears in.)

В этом сообщении указывается имя файла и номер строки, в которой обнаружена ошибка (test.cpp:5), а также описание ошибки ('c' undeclared — объект с именем 'c' не объявлен).

Объявление переменной имеет следующий вид:

<тип переменой> <один или несколько идентификаторов переменных через запятую>;

Например, переменные n и m типа int можно объявить такой строкой:

    int n, m;

Переменную x типа double можно объявить такой строкой:

    double x;

Значения переменных сразу после объявления не определены и являются произвольными. Например, если написать следующую программу:

    int a;
    cout << a;

то на экран будет выведено произвольное целое число, например, -1208725516 (так называемый "мусор").

Идентификатор переменной — это ее имя, которое должно быть последовательностью букв латинского алфавита, символа подчеркивания и цифр, начинающейся с буквы. Примеры правильных идентификаторов: а, i, Year, school179. Имена переменных чувствительны к регистру букв, то есть Number, number, NUMBER и nUMbeR — это четыре разных переменных.

Арифметические операторы

Арифметическая инструкция — это некоторое выражение, состоящее из констант, идентификаторов переменных и арифметических операторов, которая завершается точкой с запятой. Самый главный арифметический оператор — это оператор присваивания ‘=’, который присваивает одной переменной, идентификатор которой указывается слева от оператора ‘=’ значение некоторого выражения, которое стоит справа. Например:

    a = 2;
    b = a + 1;

Мы начнем с рассмотрения только целочисленных величин. Для хранения в памяти целочисленных величин как правило используются переменные типа int. С переменными типа int можно делать следующие арифметические действия:

+Сложение
-Вычитание
*Умножение
/Деление (целочисленное)
%Остаток от деления

Особого внимания заслуживает операторы деления и остатка. Деление производится нацело, с отбрасыванием целой части. Например, 10/3 это 3, 179/10 это 17, 2/5 это 0. Оператор % возвращает остаток от деления того, что записано справа на то, что записано слева. Например, 10%3 это 1, 179%10 это 9, 2%5 это 2.

В арифметическом выражении сначала выполняются слева направо все операторы умножения и деления, затем слева направо все операторы сложения и вычитания, затем справа налево все операторы присваивания. При необходимости порядок действий можно изменить при помощи скобок.

Ввод-вывод

Для того, чтобы вывести на экран значение переменной или текстовой строки нужно использовать объект “cout” и оператор “<<”, который в данном случае следует называть "Поместить в". cout — объект, связанный со стандартным выводом программы, как правило, это терминал. Для того, чтобы перейти при печати на новую строку необходимо поместить в cout стандартный объект endl.

Текстовые строки при выводе на экран необходимо заключать в двойные кавычки. Если хочется вывести на экран несколько объектов (переменных, текстовых строк и т.д.), то их нужно разделять между собой оператором ‘<<’.

Для того, чтобы считать значение переменной нужно использовать объект “cin” и оператор ‘>>’, который надо называть "Извлечь из". При этом считывание данных будет производиться со стандартного ввода программы, как правило, являющегося клавиатурой. Если хочется за одну операцию считать несколько переменных, то их идентификаторы нужно разделять между собой оператором “>>”.

2.5 Более сложный пример

Обобщим все изложенное выше в более сложной программе, которая находит сумму двух введенных чисел.

#include <iostream>

using namespace std;

int main()
{
    int a, b, s;
    cout << "Введите два числа: ";
    cin >> a >> b;
    s = a + b;
    cout << a << "+" << b << "=" << s << endl;
    return 0;
}

Упражнения

B: Следующее и предыдущее

Напишите программу, которая считывает целое число и выводит текст, аналогичный следующему:

The next number for the number 179 is 180.
The previous number for the number 179 is 178.

В данном случае было введено число 179.

C: a4

Дано целое число a. Вычислите и выведите значение a4. Сколько операций умножения вы использовали? Какое наименьшее число операций умножения необходимо для решения этой задачи?

D: a8

Дано целое число a. Вычислите a8 при помощи трех операций умножения.

E: a6

Дано целое число a. Вычислите a6 при помощи трех операций умножения.

F: a7

Дано целое число a. Вычислите a7 при помощи четырех операций умножения.

G: a13

Дано целое число a. Вычислите a13 при помощи пяти операций умножения.

H: a21

Дано целое число a. Вычислите a21 при помощи шести операций умножения.

Запустите эту программу и введите число 10. Почему получился такой странный ответ?.

I: Последняя цифра

Дано натуральное число. Найдите его последнюю цифру.

J: Число десятков двузначного числа

Дано двузначное число. Найдите число десятков в нем.

K: Число десятков

Дано натуральное число. Найдите число десятков в его десятичной записи (то есть вторую справа цифру его десятичной записи).

L: Сумма цифр

Дано трехзначное число. Найдите сумму его цифр.

M: Следующее четное

Дано целое число n. Выведите следующее за ним четное число.

Пример

Ввод Вывод
7
8
8
10

N: Деление с остатком

Дано два числа n и m. За день машина проезжает n километров. Сколько дней нужно, чтобы проехать маршут длиной m километров?

Пример

Ввод Вывод
700 750
2
700 2100
3

O: Электронные часы - 1

Дано число n. С начала суток прошло n минут. Определите, сколько часов и минут будут показывать электронные часы в этот момент. Программа должна вывести два числа: количество часов (от 0 до 23) и количество минут (от 0 до 59). Учтите, что число n может быть больше, чем количество часов в сутках.

Пример

Ввод Вывод
150
2 30
1441
0 1

P: Электронные часы - 2

Электронные часы показывают время в формате h:mm:ss, то есть сначала записывается количество часов, потом обязательно двузначное количество минут, затем обязательно двузначное количество секунд. Количество минут и секунд при необходимости дополняются до двузначного числа нулями.

С начала суток прошло n секунд. Выведите, что покажут часы.

Пример

Ввод Вывод
3602
1:00:02
129700
12:01:40

Q: Обмен значений - 1

Напишите программу, которая считывает значения двух переменных a и b, затем меняет их значения местами (то есть в переменной a должно быть записано то, что раньше хранилось в b, а в переменной b записано то, что раньше хранилось в a). Затем выведите значения переменных.

Пример

Ввод Вывод
3 7
7 3

Примечание. Решением задачи не является такой код: cin >> a >> b; cout << b << " " << a;.

R: Обмен значений - 2

Решите предыдущую задачу без использования дополнительной переменной.

S: Стоимость покупки

Пирожок в столовой стоит a рублей и b копеек. Определите, сколько рублей и копеек нужно заплатить за n пирожков. Программа получает на вход три числа: a, b, n, и должна вывести два числа: стоимость покупки в рублях и копейках.

Пример

Ввод Вывод
10 15 2
20 30
2 50 4
10 0

T: Разность времен

Даны значения двух моментов времени, принадлежачим одним и тем же суткам: часы, минуты и секунды для каждого из моментов времени. Известно, что второй момент времени наступил не раньше первого. Определите, сколько секунд прошло между двумя моментами времени. Программа на вход получает три целых числа — часы, минуты, секунды, задающие первый момент времени и три целых числа, задающих второй момент времени. Выведите число секунд между этими моментами времени.

Пример

Ввод Вывод
1 1 1
2 2 2
3661
1 2 30
1 3 20
50

U*: Симметричное число

Дано четырехзначное число. Определите, является ли его десятичная запись симметричной. Если число симметричное, то выведите 1, иначе выведите любое другое целое число. Число может иметь меньше четырех знаков, тогда нужно считать, что его десятичная запись дополняется слева незначащими нулями.

Пример

Ввод Вывод
2002
1
2008
37

V*: Проверьте делимость

Даны два натуральных числа n и m. Если одно из них делится на другое нацело, выведите 1, иначе выведите любое другое целое число.

Пример

Ввод Вывод
2 8
1
8 2
1
3 5
7

W**: Максимум

Напишите программу, которая считывает значения двух переменных a и и, затем выводит наибольшее значение из них. a и и — натуральные числа от 1 до 1000.

При решении задачи можно пользоваться только переменными типа int, операциями +, -, *, /, %, =. Нельзя пользоваться нелинейными конструкциями: ветвлениями, циклами, функциями.

Пример

Ввод Вывод
8 5
8
5 8
8
5 5
5

X**: Спираль - 1

Квадратную таблицу размером n×n заполнили натуральными числами от 1 до n2 по спирали по часовой стрелке, начиная с левой верхней угловой клетки. Вот пример заполнения для таблицы 4×4:

1 2 3 4
121314 5
111615 6
10 9 8 7

По числу, записанному в некоторой клетке, определите номер строки и столбца, в которой она находится. Строки нумеруются сверху вниз, столбцы – слева направо, начиная с 1.

Программа получает на вход два числа: размер таблицы n и число, стоящее в искомой клетке (от 1 до n2). Программа должна вывести два числа: номер строки и номер столбца.

Пример

Ввод Вывод
5 1
1 1
4 16
3 2
100 2138
95 36

Y**: Спираль - 2

Решите обратную к предыдущей задачу — по номеру строки и столбца определите число, записанное в клетке.

Программа получает на вход три числа: размер таблицы n, номер строки и номер столбца. Программа должна вывести число, записанное в указанной клетке.

Пример

Ввод Вывод
5 1 1
1
4 3 2
16
100 95 36
2138