10035. Простая арифметика
Вычислить количество переносов
при сложении двух целых чисел.
Вход.
Каждая строка содержит два целых числа, состоящих из не более, чем 10 знаков.
Последняя строка содержит два нуля и не обрабатывается.
Выход. Для каждого теста вывести
количество переносов при сложении входных чисел в соответствии с форматом,
приведенном ниже.
123 456
555 555
123 594
0 0
Пример выхода
No carry operation.
3 carry operations.
1 carry operation.
элементарные вычисления
Складываем два числа в столбик,
подсчитываем количество переносов.
Поскольку числа содержат до 10
знаков включительно, слагаемые a и b будем держать в переменных типа long
long. В переменной carry храним
текущий перенос (0 или 1), в res подсчитываем
общее число переносов.
long long
a,b;
int carry, res;
Читаем входные слагаемые a и b,
обнуляем carry и res. Складываем две последние цифры чисел a и b со значением
переноса. Если оно больше 9, то перенос в текущем разряде присутствует, положим
carry = 1. Иначе сбрасываем carry = 0. Делим оба слагаемых на 10,
тем самым переходя к сложению цифр следующего разряда. Процесс сложения
продолжается, пока оба числа содержат в своей записи хотя бы одну цифру.
while(scanf("%lld
%lld",&a,&b),a + b > 0)
{
res = carry = 0;
while((a >
0) || (b > 0))
{
if (a%10 +
b%10 + carry > 9)
{
carry = 1; res++;
}
else carry
= 0;
a /= 10; b /= 10;
}
Если переносов не было (res = 0), то выводим слово ‘No’, иначе –
значение res. Далее выводим фразу
‘carry operation’ и суффикс ‘s’ если число переносов больше 1. Строка вывода
заканчивается точкой.
if (!res)
printf("No "); else printf("%d
",res);
printf("carry
operation");
if (res >
1) printf("s.\n"); else printf(".\n");
}