например число 15 в двоичной системе представляет собой 1111, и соотвтественно складывать нужно 1+1+1+1 = 4, что согласитесь не одно и тоже если бы мы сладывали 1+5=6 в дестятичной...
но так как наверняка(!) подразумеваеся десятичная система, к которой мы так все привыкли, то задание сводится к разделению числа на разряды, как то
156 = 1 + 5 + 6
как же нам получить эти 1, 5 и 6?
оказывается - очень просто! незабываем о том что система счисления по основанию 10, а это значит, что если поделить наше 156 на 10 мы получим целую часть и остаток от деления
156 делим на десять - целая часть 15, а остаток 6 (вот оно наше первое число!! только с конца)
теперь делим целую часть снова на 10 (основание системы счисления)
15 делим на десять - целая часть 1, а остаток 5 (вот оно наше второе число!!)
и так продолжаем делить пока есть что делить
1 делим на десять - целая часть... а ее уже нету! т.е. 0 (для нас это сигнал, что нужно заканчивать деление), а остаток 1 (наше последнее число!!!)
осталось лишь все сложижить 6 + 5 + 1 и получить искомую сумму 12
ну а теперь несколько слов, о том как это реализовать в том или ином языке программирования.
в каждом языке на сколько мне известно существуют специальные операторы для нахождения целого от деления или остатка (так называемое деление по модулю)
ну скажем С\С++
int n = 156;
int ostatok = 156 % 10; // тут будет 6
n = n / 10; //тут будет 15
ну и вот такой кусочек кода подсчитает сумму
int summa = 0;
int n = 156;
while (n)
{
summa += n % 10;
n = n / 10;
}
printf("summa: %d\n", summa); //вывод на экран
или как это сделать на javascript (js)
function getSum(var n)
{
var sum = 0;
while (n)
{
sum += n % 10;
n = Math.floor(n / 10); //берем целую часть от деления, т.е .округляем до меньшего
}
return sum;
}
мы о чем то забыли?..
Комментариев нет:
Отправить комментарий