C # For индекс цикла возвращает ascii вместо текущей итерации - PullRequest
1 голос
/ 23 сентября 2019

Мне нужно создать программу, которая рассчитывает факториал числа и суммирует разные числа.

Я застрял в точке, где мне нужно взять текущее число в цикле for, чтобы сделать этофакториал (например, число 145, и я не могу взять 5).Я пробовал следующее:

for (int i = length-1; i >= 0; i--)
{
    int currentNumber = inputString[i];
    currentSum = currentSum * i;
    sum += currentSum;
}

inputString - длина данного числа.Проблема заключается в том, что таким образом currentNumber становится эквивалентом ASCII (если i = 3 currentSum становится 51).Как мне сделать currentSum стать 3?

Ответы [ 3 ]

4 голосов
/ 23 сентября 2019

В качестве альтернативы вы можете использовать:

int currentNumber = int.Parse(inputString[i].ToString());
2 голосов
/ 23 сентября 2019

Я хотел бы предложить альтернативу:

int num = int.Parse(inputString); // Convert whole input to int
int sum = 0;

while( num != 0 ) // >0 is not enough, num could be negative.
{
    sum += num % 10;  // Sum up least significant place
    num = num / 10;   // "Decimal shift right"
}

С вашим примером "145" это будет означать:

Iteration 1:
sum += 145 % 10 => sum = 0 + 5 = 5
num = num / 10 => num = 145 / 10 = 14

Iteration 2:
sum += 14 % 10 => sum = 5 + 4 = 9
num = num / 10 => num = 14 / 10 = 1

Iteration 3:
sum += 1 % 10 => sum = 9 + 1 = 10
num = num / 10 => num = 1 / 10 = 0

num == 0 => end while , sum = 10

Отказ от ответственности: Предполагается, что ввод на самом деледопустимое целочисленное значение.Я настоятельно рекомендую сначала подтвердить это. «Никогда не доверяйте пользовательскому вводу».

1 голос
/ 23 сентября 2019

Предполагая, что inputString является только числовым, вы можете обойтись без:

int currentNumber = inputString[i] - '0';

Краткое объяснение: символьное представление числа '3' равно 51, но они расположены по порядку (поэтому '0' это48, «1» - это 49 и т. Д.), И вы можете получить «числовое значение» символа, удалив смещение (которое равно «0»).

...