Somme des chiffres en C#
Quelle est la mise en œuvre la plus rapide et la plus facile à lire du calcul de la somme des chiffres?
C'est-à-dire étant donné le nombre: 17463 = 1 + 7 + 4 + 6 + 3 = 21
17 réponses
Vous pouvez le faire arithmétiquement, sans utiliser de chaîne:
sum = 0;
while (n != 0) {
sum += n % 10;
n /= 10;
}
J'utilise
int result = 17463.ToString().Sum(c => c - '0');
, Il utilise seulement 1 ligne de code.
Pour les nombres entiers, Greg Hewgill a la plupart de la réponse, mais oublie de tenir compte de n
n = Math.Abs(n);
sum = 0;
while (n != 0) {
sum += n % 10;
n /= 10;
}
Le nombre est un nombre à virgule flottante, une approche différente devrait être adoptée, et la solution de chaowman échouera complètement quand elle atteindra le point décimal.
int num = 12346;
int sum = 0;
for (int n = num; n > 0; sum += n % 10, n /= 10) ;
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;
}
J'aime la réponse du chaowman, mais ferait un changement
int result = 17463.ToString().Sum(c => Convert.ToInt32(c));
Je ne suis même pas sûr que le c - '0', la syntaxe fonctionnerait? (la soustraction de deux caractères devrait donner un caractère en conséquence, je pense?)
Je pense que c'est la version la plus lisible (en utilisant le mot sum en combinaison avec l'expression lambda montrant que vous le ferez pour chaque caractère). Mais en effet, je ne pense pas que ce sera le plus rapide.
Je pensais juste poster ceci pour l'achèvement:
Si vous avez besoin d'un appel récursif à la somme des chiffres, de l'e.g: 17463 -> 1 + 7 + 4 + 6 + 3 = 21 -> 2 + 1 = 3
alors la meilleure solution serait
int result = input % 9;
return (result == 0 && input > 0) ? 9 : result;
Je suggère que l'implémentation la plus facile à lire serait quelque chose comme:
public int sum(int number)
{
int ret = 0;
foreach (char c in Math.Abs(number).ToString())
ret += c - '0';
return ret;
}
Cela fonctionne, et est assez facile à lire. BTW: convertir.ToInt32 ('3') donne 51, pas 3. Convertir.ToInt32('3' - '0') donne 3.
Je suppose que L'implémentation la plus rapide est la solution arithmétique de Greg Hewgill.
private static int getDigitSum(int ds)
{
int dssum = 0;
while (ds > 0)
{
dssum += ds % 10;
ds /= 10;
if (dssum > 9)
{
dssum -= 9;
}
}
return dssum;
}
C'est pour fournir la somme des chiffres entre 0-9
Le moyen le plus simple et le plus simple serait d'utiliser des boucles pour Trouver la somme des chiffres.
int sum = 0;
int n = 1234;
while(n > 0)
{
sum += n%10;
n /= 10;
}
while(ino!=0 )
{
digit=(ino%10));
printf("%d",digit);
ino=ino/10;
}
Pour un tableau comme celui-ci i / p: 10 25 712 65
Cela ne fonctionnera pas, vous devez essayer une autre logique si quelqu'un en a un, Veuillez le poster pour l'ajout d'éléments de tableau.
#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;
}
Il y a quelque temps, je devais trouver la somme des chiffres de quelque chose. J'ai utilisé le code de Muhammad Hasan Khan, mais il a continué à renvoyer le bon nombre comme une décimale récurrente, c'est-à-dire quand la somme des chiffres était 4, j'obtiendrais 4.44444444444444 etc. Par conséquent, je l'ai édité, obtenant la somme des chiffres correcte à chaque fois avec ce code:
double a, n, sumD;
for (n = a; n > 0; sumD += n % 10, n /= 10);
int sumI = (int)Math.Floor(sumD);
Où a est le nombre dont vous voulez la somme des chiffres, n est un double utilisé pour ce processus, sumD est la somme des chiffres en double et sumI est la somme des chiffres en entier, donc le chiffre correct somme.
int n = 17463; int sum = 0;
for (int i = n; i > 0; i = i / 10)
{
sum = sum + i % 10;
}
Console.WriteLine(sum);
Console.ReadLine();
Surpris personne n'a considéré la méthode de sous-chaîne. Ne sais pas si sa plus efficaces ou pas. Pour tous ceux qui savent comment utiliser cette méthode, c'est assez intuitif pour des cas comme celui-ci.
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();
static int SumOfDigits(int num)
{
string stringNum = num.ToString();
int sum = 0;
for (int i = 0; i < stringNum.Length; i++)
{
sum+= int.Parse(Convert.ToString(stringNum[i]));
}
return sum;
}