Сумма цифр числа?

Я новичок в программировании. Здесь я решал простую задачу в функциональном программировании (OZ), которая находит сумму цифр 6-значного положительного целого числа. Пример:- if n = 123456 затем output = 1+2+3+4+5+6 which is 21, здесь я нашел решение как ниже

fun {SumDigits6 N}
{SumDigits (N Div 1000) + SumDigits (N mod 1000)}
end

и это говорит аргумент (N Div 1000) дает первые 3 цифры и аргумент (N mod 1000) дает нам последние 3 цифры. и да, я получаю правильное решение, но я сомневаюсь, как они могли дать правильные решения. Я имею в виду в данном примере не (N Div 1000) of 123456 дает 123 верно не 1+2+3 и так же (N mod 1000) of123456 дает нам 456 не 4+5+6 право?. в этом случае ответ должен быть 123+456 который равен 579 не 21 право? что мне здесь не хватает. Я прошу прощения за такой простой вопрос, но любая помощь будет признательна. Спасибо:)

3 ответа

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

declare
fun {SumDigit N Accumulator}
 if N==0 then Accumulator
 else {SumDigit (N div 10) Accumulator+(N mod 10)}
 end
end

{Browse {SumDigit 123456 0}}

Вам не хватает самого важного здесь. Это должно происходить в цикле, и каждый раз значение N изменяется.

Например, в первой итерации Div дает 1, а mod дает 6, поэтому вы добавляете 1 и 6 и сохраняете результат, а число также изменяется (оно становится 2345), во второй итерации div дает 2, а mod дает 5, а вы добавляете 2+5+ предыдущий результат и число также изменяется. Это продолжается до тех пор, пока число не станет равным нулю

я думаю, что самый элегантный способ - это функция -

static int SumOfDigit(int n)
 {
if (n < 10) return n;
return SumOfDigit(SumOfDigit(n/10)+n%10);

}

просто и верно:-)

int main()
{
  int n,m,d,s=0;
  scanf("%d",&n);
  m=n;
  while(m!=0)
 {
       d=m%10;
       s=s+d;
       m=m/10;
 }
printf("Sum of digits of %d is %d",n,s);
} 
Другие вопросы по тегам