Консультации

Задача №2805. Интересный перевод

Задача №2805. Интересный перевод

от Эдуард Поконечный -
Number of replies: 2
Не могу понять, в чём дело! В задаче  №2805

http://informatics.mccme.ru/moodle/mod/statements/view3.php?id=248&chapterid=2805#1

20 тестов, а моя программа проходит только 15!

Я сначала использовал int. Потом где-то на этом форуме нашел, что нужно использовать числа повышенной точности. Я переработал программу для типа long long int, уж куда точнее!?? А кол-во пройденных тестов увеличилось на 1! Подскажите, в чём ошибка?

--------------------------------

#include <iostream>
#include <string>

using namespace std;

long long int StrToLongLong(string str) // операция перевода строки в long long
// написана не мной, но слегка изменена для этой проги
{
long long int ret = 0;
long long int mul = 1;
int len = str.length();
int i = 0, j = 0;
bool neg = false;

if(str[i] == '-') {
neg = true;
i++;
} else if(str[i] == '+')
i++;

while( i < len ) {
ret += (str[len - j - 1] - 0x30) * mul;
mul *= 10;
i++; j++;
}

if(neg)
ret = -ret;

return ret;
}

bool is_dig(unsigned char c) // проверка: символ - цифра ли нет
{
return (c>=48 && c<=57)?true:false;
}

string tobinsystem(long long int k) // перевод в двоичный формат
{
string res="";
if (k!=0)
  while (k>0)
    {
    res=((k%2)?"1":"0")+res;
    k/=2;
    }
else res="0";
return (res);
}

int main()
{
//setlocale ( LC_ALL, "Russian" );
string s, temp;

getline(cin, s);
cout<<noskipws; // не пропускаем пробелы и т.п.

int l=s.length(), index=-1;
for (int i=0; i<=l; i++)
  {
  if (is_dig(s[i])&&index==-1) index=i; // если символ - цифра, продолжаем читать число.
  //если он встретился впервые (index==-1), то запоминаем начало числa
  else if (!is_dig(s[i])) // если не цифра
    {
if (index!=-1) // то обрабатываем полученное число
  {
  temp=s.substr(index, i-index); //выделяем подстроку
  cout << tobinsystem(StrToLongLong(temp)); // выводим эту строку, переведенную в дв. формат
  index=-1; // обнуляем индекс
  }
    if (i!=l)cout << s[i]; // в любом случае выводим не-циферный символ
    }
  }

//system("pause");

return 0;
}
In reply to Эдуард Поконечный

Re: Задача №2805. Интересный перевод

от Peter Cherepanov -
Читайте внимательно все сообщения по ссылке "Вопросы".