Zamiana liczby na sumę jej cyfr, zmienna static

0

Funkcja zmienia np. liczbę 15 na 1 + 5 =6 albo 134 na 1+3+4=8 no i jest rekurencyjnie, jak zamienić aby nie używać zmiennej static bo mi test nie chce
przyjąć, a zależało mi na funkcji rekurencyjnej

#include <stdio.h>
#include <stdlib.h>

int addTwoDigits(int n) {
    static int sum = 0;
    sum += n%10;
    if(n<10) return(sum);
    else addTwoDigits(n = n/10);
}

int main(int argc, char* argv[])
{
	printf("%d\n",addTwoDigits(1648));
    return 0;
}

0

Przekaż parametr sum do funkcji

int addTwoDigits(int n, int sum);
0
#include <stdio.h>
#include <stdlib.h>
 
int addTwoDigits(int n, int sum) 
{
    sum += n%10;
    if(n<10) return(sum);
    else addTwoDigits(n = n/10, sum);
}
 
int main(int argc, char* argv[])
{
	int sum = 0;
    printf("%d\n",addTwoDigits(1648, sum));
    return 0;
}

inaczej to nie wiem

0

ciekawa sprawa, a mianowicie

int addTwoDigits(int n, int sum = 0)
{
    sum += n % 10;
    if (n < 10)
        return (sum);
    else
        addTwoDigits(n = n / 10, sum);
}

tak przyjeło jako poprawne, nie bardzo wiedziałem czy można tak zrobić chodzi o int sum=0 w nagłówku funkcji, jak wkleję do code blocks to mi wyrzuca błąd,
a czy jest to poprawne? (test jest w c++)

9
#include <stdio.h>

int digitsSum(int number)
{
    if (number < 10) return number;
    return number % 10 + digitsSum(number / 10);
}

int main()
{
    int x = 2234190;
    printf("%d\n", digitsSum(x));
    return 0;
}
0

troche brzydko to opisałem, chodzi o operację addTwoDigits(n = n / 10, sum); chodziło mi o oczwiście o addTwoDigits(n / 10, sum); ale nie dopatrzyłem i napisałem 1 przypadek, i teraz mnie ciekawi dlaczego do funkcji zostało przekazane n/10 a nie np. 1 jako wynik operacji przypisania, jak np. się uda przypisać to się zwraca wartość 1 , nie wiem czy rozumiesz o co mi chdodzi

0

Dobra, chyba zrozumiałem o co Ci chodzi.

Wartość operacji przypisywania to ta wartość, która została przypisana, a nie 1. Dlatego

int n = 345;
int x = n = n / 10;

zarówno x jak i n będą miały wartość 34.
Jak chwilę o tym pomyśleć, to przecież to "oczywiste". Jeżeli masz

a = b = c;

to chcesz by a b i c miały tę samą wartość, a nie żeby a miało wartość 1.

0
unsigned int sumOfDecDigits(unsigned int x)
{
    unsigned int sum = 0;
    while (x!=0) {
         sum += x%10;
         x /= 10;
    }
    return sum;
}
1

w JavaScript

const number = 1933;
const sumOfDigits = (number+'').split('').reduce((a,b) => ~~a + ~~b)

:)

EDIT:
albo tak, bardziej rozwlekle, ale bardziej elegancko i bez tricków z konwersją do stringa:

const sumOfDigits = n => {
  let sum = 0;
  do {
    let digit = n % 10;
    sum += digit;
    n = (n - digit) / 10;
  } while (n > 0);  
  return sum;
};

console.log(sumOfDigits(5921)); // 17

1 użytkowników online, w tym zalogowanych: 0, gości: 1