Проблема преобразования времени. Что я делаю не так? [closed]

Я пытался решить эту проблему с преобразованием времени на хакерранке, но не смог получить правильный результат на тестовых примерах.

Я приложил все усилия вместе с ожидаемым и моим результатом ниже. Любая оптимизация в нем будет полезна

Следующий вопрос.

Формат ввода

Одна строка, содержащая время в 12-часовом формате (например: чч: мм: ссАМ или чч: мм: ссПМ), где 01 <= чч <= 12.

Формат вывода

Преобразуйте и распечатайте заданное время в 24-часовом формате, где 00 <= hh <= 23.

#include<bits/stdc++.h>

using namespace std;

int main()
{
    string s;
    cin>>s;
    
    if(s[8]=='A')
    {
        if(s[0]==1 && s[1]==2)
        {
            s[0]=0;
            s[1]=0;
            
            string s1=s.substr(0,8);
            cout<<s1<<'n';
        }
        else
        {
            string s1=s.substr(0,8);
            cout<<s1<<'n';
        }
    }
    
    else
    {
        if(s[0]==1 && s[1]==2)
        {
            string s1=s.substr(0,8);
            cout<<s1<<'n';
        }
        else
        {
            int x=(s[0]*10)+(s[1]);
            string s1=s.substr(2,6);
            
            cout<<12+x<<s1<<'n';
        }
    }
    
    return 0;
}

Ввод — 19:05:45

Мой вывод — 547: 05: 45

Ожидаемый результат — 19:05:47

1 ответ
1

Проблема находится в строке № 36 — int x=(s[0]*10)+(s[1]);.

Проблема

Ценности s[0] и s[1] неявно приводятся к целым числам, что означает, что значения ASCII s[0] и s[1] используются для вычислений.

Решение

Изменив строку №36 на int x=((s[0] - '0')*10)+(s[1] - '0');, заставляет код пройти тест, упомянутый в вопросе.

  • 3

    На будущее откажитесь отвечать на вопросы не по теме.

    — Хеслахер

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *