Сумма цифр числа?
Я новичок в программировании. Здесь я решал простую задачу в функциональном программировании (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);
}