Сумма первой и последней цифр числа

Задача

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

Решение

Извлечь последнюю цифру числа легко: достаточно найти остаток от деления на 10. В языке Паскаль это делается с помощью оператора mod.

Чтобы извлечь первую цифру числа, надо знать его разрядность, после чего найти остаток от деления 10 в степени разрядность минус 1. Так, если число трехзначное, то надо делить на 100, т. е. 102. Однако программа разрядности числа не знает.

Поэтому, чтобы извлечь первую цифру числа, можно пойти двумя путями:

  1. Последовательно делить число нацело на 10, пока от него не останется одна цифра, которая и будет первой. После этого найти ее сумму с последней цифрой, которая была найдена ранее.
  2. Преобразовать число в строку, извлечь первый символ, после чего снова преобразовать его в число для нахождения суммы.

Здесь мы рассмотрим решение задачи только по первому варианту, без преобразования в строку.

var
        a, b, sum, n: longint;
begin
        readln(n);
 
        a := n mod 10; // последняя цифра 
        n := n div 10;
        while n > 0 do begin
                b := n mod 10;
                n := n div 10;
        end;
 
        writeln(a+b);
readln;
end.

В коде выше в переменную a записывается последняя цифра. После чего число делится нацело на 10 и эта цифра исключается. Далее в цикле постепенно число сокращается на один разряд с помощью div. Перед этим удаляемая цифра присваивается переменной b. Когда все цифры числа будут удалены, то в переменной b останется первая. После цикла значение переменных складывается.

Более компактное решение:

var 
    a: longint;
    b: byte;
 
begin
    readln(a);
    b := a mod 10;
    while a >= 10 do 
        a := a div 10;
    writeln(b+a);
end.

Здесь число a в цикле постепенно сокращается до одного первого разряда. Перед этим самый младший разряд, т. е. последняя цифра числа сохраняется в переменной b.

Решить задачу можно не только с помощью цикла while, но и repeat:

var a,b,c,d:integer;
begin
    readln(a);
    d := a mod 10;
    repeat
        b := a mod 10;
        a := a div 10;
    until a=0;
    c := d+b;
    writeln(c);
end.

Тема

Циклы

Уровень

Комбинированные задачи

Последняя редакция