Quelle est l'implémentation 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
Vous pouvez le faire de manière arithmétique, 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 majeure partie de la réponse, mais il oublie de prendre en compte le n <0. La somme des chiffres de -1234 devrait toujours être de 10, pas de -10.
n = Math.Abs(n);
sum = 0;
while (n != 0) {
sum += n % 10;
n /= 10;
}
Si le nombre est un nombre à virgule flottante, une approche différente doit être adoptée et la solution de chaowman échouera complètement lorsqu'elle atteindra la virgule décimale.
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;
}
Je pensais que je ne ferais que poster ceci par souci de complétion:
Si vous avez besoin d’une somme récursive de chiffres, par exemple: 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;
J'aime la réponse du chaowman, mais je ferais 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? (soustraire deux caractères devrait donner un caractère comme résultat, je pense?)
Je pense que c'est la version la plus lisible (utiliser la somme de mots 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.
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 et 9
Je suggérerais que la mise en œuvre 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: Convert.ToInt32 ('3') donne 51, pas 3. Convert.ToInt32 ('3' - '0') donne 3.
Je suppose que la solution la plus rapide est la solution arithmétique de Greg Hewgill.
int n = 17463; int sum = 0;
for (int i = n; i > 0; i = i / 10)
{
sum = sum + i % 10;
}
Console.WriteLine(sum);
Console.ReadLine();
Il y a quelque temps, je devais trouver la somme en chiffres de quelque chose. J'ai utilisé le code de Muhammad Hasan Khan, mais le nombre correct renvoyait le bon nombre sous forme décimale récurrente, c'est-à-dire que lorsque la somme des chiffres était 4, je recevais 4.44444444444444 etc. . 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, n est un double utilisé pour ce processus, sumD est la somme de chiffres en double et sumI est la somme de chiffres en entier, donc la somme de chiffres correcte.
#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;
}
La méthode la plus simple et la plus simple consiste à utiliser des boucles pour trouver la somme des chiffres .
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;);
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 devrez essayer une autre logique si quelqu'un en a une, merci de l'afficher pour l'ajout d'éléments de tableau.