Почему он говорит мне, что сумма 5 чисел равна 250, когда это 15? - PullRequest
1 голос
/ 12 июля 2020
using System;
using System.Linq;
using System.IO;
using System.Text;
using System.Collections;
using System.Collections.Generic;

/**
 * Auto-generated code below aims at helping you parse
 * the standard input according to the problem statement.
 **/
class Solution
{
    static void Main(string[] args)
    {
        int value=0;
        int n = int.Parse(Console.ReadLine());
        string s = Console.ReadLine();

        for(int i = 0;i<=s.Length-1;i++){
            if(s[i]!=0){
                value+=s[i];
                Console.WriteLine(value);
            }
            else{value=0;}
        }

        //Console.WriteLine(value);
    }
}

Я чувствую себя глупо. Код должен взять 5 числа из строки и сложить их. Если он находит 0, он устанавливает значение обратно на 0 и кариес при повторном суммировании. Но он говорит мне, что значение 12345 равно 250

Ответы [ 3 ]

2 голосов
/ 12 июля 2020

Ну, вы фактически суммируете char s, а не int s:

  value+=s[i]; // since s is string, s[i] is of type char

Итак, у вас есть

'1' + '2' + '3' + '4' + '5' == // chars
 49 + 50 + 51 + 52 + 53 ==     // corresponding ASCII codes
 255

Вы должны суммировать int s; чтобы преобразовать из '0' в 0, вы можете просто вычесть 0:

 string s = Console.ReadLine();

 for (int i = 0; i < s.Length; ++i) {
   if (s[i] >= '1' && s[i] <= '9') { // 1..9 numbers only 
     value += s[i] - '0'; // <- Note - '0'

     Console.WriteLine(value);
   }
   else 
     value = 0;
 }
2 голосов
/ 12 июля 2020

Это потому, что вы добавляете символы в int:

  • s [i] не является int, это char
  • значение символа '1' в виде числа c значение, которое может быть добавлено к int. Это значение не 1, а 48.
  • Вы думаете, что делаете 1 + 2 + 3 + 4 + 5, но делаете '1' + '2' + '3' + '4' + '5 '= 48 + 49 + 50 + 51 + 52 = 250.

вам нужно сделать

 value+=int.Parse(""+s[i]);

, чтобы достичь желаемого

1 голос
/ 12 июля 2020

s[i] не дает вам числа, это дает вам символ. += добавит значение ASCII (или Unicode) этого символа. Смотрите здесь:

Console.WriteLine((int)'1');

Таким образом вы получите 49 + 50 + 51 + 52 + 53, что равно 255.

Используйте int.Parse() для преобразования строки в число :

value+=int.Parse(""+s[i]);

В программах вы также часто это увидите:

value+=s[i] - '0';

Это также работает, потому что символ 0 находится перед символом 1, поэтому 49-48 = 1 .

Вторая ошибка в вашей программе:

if(s[i]!=0){

По той же причине (символ вместо числа), которое должно читаться как

if(s[i]!='0'){

n кажется неиспользованным. Вы можете удалить эту строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...