Пример #1
0
int FirstDigit(int number)
{
    if(number > 10)
    {
        return FirstDigit(number / 10);
    }
    else
    {
        return number;
    }

}
Пример #2
0
InputIterator ConvertStringToIntegerRadix( InputIterator Beg, InputIterator End, T &Val )
{
   Detail::TRadixAbstraction<T, RadixValue> RA;

   //В связи с тем что все символы для проверки которые используются в этой функции в UNICODE представлении
   //имеют тот же код что и в ANSI (только 16 битный) можно использовать одну функцию как для UNICODE так и для 
   //ANSI строк
   bool IsNegate = false;

   InputIterator BegBack(Beg); //Сохраняем позицию начального итератора

   Val = 0;

   //Пропускаем пробелы
   while( Beg != End && (*Beg == '\t' || *Beg == ' ' ) ) ++Beg;

   if( Beg == End ) return BegBack;

   //Разбираемся со знаком
   if( *Beg == '-' )
   {
      IsNegate = true;
      ++Beg;
   }
   else if( *Beg == '+' )
   {
      ++Beg;
   }

   InputIterator FirstDigit(Beg); //Сохраняем позицию предполагаемой первой цифры

   //Начинаем обрабатывать цифры       
   T curDigit;

   while( Beg != End && RA.toVal(*Beg, curDigit) )
   {
      Val = RA.radix() * Val + curDigit;
      ++Beg;
   }

   if( Beg == FirstDigit ) //Мы не преобразовали не одну цифру
      return BegBack;

   #pragma warning( push )
   #pragma warning( disable: 4146 )
   if( IsNegate ) Val = -Val;
   #pragma warning( pop )

   return  Beg;
}
Пример #3
0
InputIterator ConvertIntegerToStringRadix( T Val, InputIterator Beg, InputIterator End )
{
   Detail::TRadixAbstraction<T, RadixValue> RA;

   typedef typename std::iterator_traits<InputIterator>::value_type TChar;

   InputIterator Cur(Beg);        //Текущий символ
   InputIterator FirstDigit(Beg); //Первая записанная цифра
   
   if( Val < 0 ) //Если число отрицательное выводим знак
   {
      if( Cur == End ) return Beg;

      #pragma warning( push )
      #pragma warning( disable: 4146 )
      Val = -Val;
      #pragma warning( pop )

      *Cur = '-';
      ++Cur;
      ++FirstDigit;
   }

   do
   {
      if( Cur == End ) return Beg;

      *Cur = RA.template toChar<TChar>( Val % RA.radix() );   
      ++Cur;

      Val /= RA.radix();
   }
   while( Val > 0 );

   InputIterator RetVal(Cur); //Итератор стоящий за последним записанным символом

   //Мы получили перевёрнутое число. Восстанавливаем нормальный порядок
   --Cur;

   TChar Tmp;
   while( FirstDigit < Cur ) 
   {
      Tmp = *Cur; *Cur = *FirstDigit; *FirstDigit = Tmp;
      ++FirstDigit;
      --Cur;
   } 

   return RetVal;
}
Пример #4
0
int CyclicShift(int number)
{
    return AllDigitsWithoutFirst(number) * 10 + FirstDigit(number);
}