while varios una sumar suma serie primeros numeros naturales los dev con c# algorithm sum-of-digits

c# - varios - suma de una serie de numeros en c++



Suma de dígitos en C# (16)

¿Cuál es la implementación más rápida y fácil de leer para calcular la suma de dígitos?

Es decir Dado el número: 17463 = 1 + 7 + 4 + 6 + 3 = 21


Para los números enteros, Greg Hewgill tiene la mayor parte de la respuesta, pero se olvida de dar cuenta de n <0. La suma de los dígitos de -1234 debería ser 10, no -10.

n = Math.Abs(n); sum = 0; while (n != 0) { sum += n % 10; n /= 10; }

Si el número es un número flotante, se debe tomar un enfoque diferente, y la solución de chaowman fallará por completo cuando llegue al punto decimal.


Puedes hacerlo aritméticamente, sin usar una cuerda:

sum = 0; while (n != 0) { sum += n % 10; n /= 10; }


yo suelo

int result = 17463.ToString().Sum(c => c - ''0'');

Utiliza solo 1 línea de código.


public static int SumDigits(int value) { int sum = 0; while (value != 0) { int rem; value = Math.DivRem(value, 10, out rem); sum += rem; } return sum; }


Sugeriría que la implementación más fácil de leer sería algo así como:

public int sum(int number) { int ret = 0; foreach (char c in Math.Abs(number).ToString()) ret += c - ''0''; return ret; }

Esto funciona, y es bastante fácil de leer. Por cierto: Convert.ToInt32 (''3'') da 51, no 3. Convert.ToInt32 (''3'' - ''0'') da 3.

Supongo que la implementación más rápida es la solución aritmética de Greg Hewgill.


int num = 12346; int sum = 0; for (int n = num; n > 0; sum += n % 10, n /= 10) ;


Me gusta la respuesta del chaowman, pero haría un cambio

int result = 17463.ToString().Sum(c => Convert.ToInt32(c));

Ni siquiera estoy seguro de que la sintaxis c - ''0'' funcione. (Creo que restar dos personajes debería dar un personaje como resultado?)

Creo que es la versión más legible (el uso de la palabra suma en combinación con la expresión lambda que muestra que lo harás por cada char). Pero, de hecho, no creo que sea el más rápido.


Pensé que solo publicaría esto para completar:

Si necesita una suma recursiva de dígitos, por ejemplo: 17463 -> 1 + 7 + 4 + 6 + 3 = 21 -> 2 + 1 = 3
entonces la mejor solución sería

int result = input % 9; return (result == 0 && input > 0) ? 9 : result;


La forma más simple y fácil sería usar bucles para encontrar la suma de dígitos .

int sum = 0; int n = 1234; while(n > 0) { sum += n%10; n /= 10; }


int j, k = 1234; for(j=0;j+=k%10,k/=10;);


private static int getDigitSum(int ds) { int dssum = 0; while (ds > 0) { dssum += ds % 10; ds /= 10; if (dssum > 9) { dssum -= 9; } } return dssum; }

Esto es para proporcionar la suma de dígitos entre 0-9


while(ino!=0 ) { digit=(ino%10)); printf("%d",digit); ino=ino/10; }

para una matriz como esta i / p: 10 25 712 65

esto no funcionará, tienes que probar otra lógica, si alguien tiene una, publícala para agregar elementos de la matriz.


#include <stdio.h> int main (void) { int sum = 0; int n; printf("Enter ir num "); scanf("%i", &n); while (n > 0) { sum += n % 10; n /= 10; } printf("Sum of digits is %i/n", sum); return 0; }


Hace un tiempo, tuve que encontrar la suma de dígitos de algo. Utilicé el código de Muhammad Hasan Khan, sin embargo, seguía devolviendo el número correcto como un decimal recurrente, es decir, cuando la suma de dígitos era 4, obtenía 4.44444444444444 etc. De ahí que lo edité, obteniendo la suma de dígitos correcta cada vez con este código:

double a, n, sumD; for (n = a; n > 0; sumD += n % 10, n /= 10); int sumI = (int)Math.Floor(sumD);

donde a es el número cuya suma de dígitos desea, n es un doble utilizado para este proceso, sumD es la suma del dígito en doble y sumI es la suma del dígito en entero, por lo que la suma de dígitos correcta.


Sorprendido, nadie consideró el método Substring. No sé si es más eficiente o no. Para cualquiera que sepa cómo usar este método, es bastante intuitivo para casos como este.

string number = "17463"; int sum = 0; String singleDigit = ""; for (int i = 0; i < number.Length; i++) { singleDigit = number.Substring(i, 1); sum = sum + int.Parse(singleDigit); } Console.WriteLine(sum); Console.ReadLine();


int n = 17463; int sum = 0; for (int i = n; i > 0; i = i / 10) { sum = sum + i % 10; } Console.WriteLine(sum); Console.ReadLine();