Я пытался решить эту проблему с преобразованием времени на хакерранке, но не смог получить правильный результат на тестовых примерах.
Я приложил все усилия вместе с ожидаемым и моим результатом ниже. Любая оптимизация в нем будет полезна
Следующий вопрос.
Формат ввода
Одна строка, содержащая время в 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 ответ
Проблема находится в строке № 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');
, заставляет код пройти тест, упомянутый в вопросе.
На будущее откажитесь отвечать на вопросы не по теме.
— Хеслахер