Подтвердить что ты не робот

Сумма цифр в С#

Какая самая быстрая и простая в чтении реализация вычисления суммы цифр?

т.е. Учитывая число: 17463 = 1 + 7 + 4 + 6 + 3 = 21

4b9b3361

Ответ 1

Вы можете сделать это арифметически, не используя строку:

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

Ответ 2

Я использую

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

Он использует только одну строку кода.

Ответ 3

Для целых чисел Greg Hewgill имеет большую часть ответа, но забывает учитывать n < 0. Сумма цифр -1234 должна быть равна 10, а не -10.

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

Это число является числом с плавающей запятой, следует использовать другой подход, и решение хаоумана полностью потерпит неудачу, когда оно достигнет десятичной точки.

Ответ 4

 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;
 }

Ответ 5

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

Ответ 6

Мне нравится ответ chaowman, но он будет делать одно изменение

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

Я даже не уверен, что c - '0', синтаксис будет работать? (вычитание двух символов должно дать персонажу в результате, я думаю?)

Я думаю, что это самая читаемая версия (использование суммы слова в сочетании с выражением лямбда, показывающее, что вы сделаете это для каждого char). Но, действительно, я не думаю, что это будет самый быстрый.

Ответ 7

Я думал, что просто отправлю это ради завершения:

Если вам нужна рекурсивная сумма цифр, например: 17463 → 1 + 7 + 4 + 6 + 3 = 21 → 2 + 1 = 3
то лучшим решением было бы

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

Ответ 8

Я бы предположил, что самая простая для чтения реализация будет выглядеть примерно так:

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

Это работает и довольно легко читается. BTW: Convert.ToInt32 ('3') дает 51, а не 3. Convert.ToInt32 ('3' - '0') дает 3.

Я бы предположил, что самая быстрая реализация - это арифметическое решение Грега Хьюджилла.

Ответ 9

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

Это означает, что сумма цифр между 0-9

Ответ 10

Самый простой и простой способ - использовать циклы для найти сумму цифр.

int sum = 0;
int n = 1234;

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

Ответ 11

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

Ответ 12

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

для такого массива i/p: 10 25 712 65

эта привычная работа, вы должны попробовать другую логику, если кто-то получил ее, отправьте ее для добавления элементов массива.

Ответ 13

#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;
}

Ответ 14

А назад, мне пришлось найти цифру, сумму чего-то. Я использовал код Мухаммада Хасана Хана, однако он продолжал возвращать правильное число как повторяющееся десятичное число, то есть когда цифра была равна 4, я бы получил 4.44444444444444 и т.д. Поэтому я отредактировал его, получив правильную цифру, каждый раз с помощью этого кода:

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

где a - это число, цифра которого вы хотите, n - это двойное значение, используемое для этого процесса, sumD - это сумма цифр в double, а sumI - сумма цифр в целочисленном размере, поэтому правильная сумма цифр.

Ответ 15

Удивленно никто не рассматривал метод подстроки. Не знаю, эффективнее ли это или нет. Для тех, кто знает, как использовать этот метод, он вполне интуитивно понятен для таких случаев.

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();