Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

sem4_2

.c
Скачиваний:
0
Добавлен:
29.05.2019
Размер:
1.78 Кб
Скачать
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void scan(char* str);
int to_upper(char c);
int is_valid(char c);
int hextodec(char* num);
int str_length(char* str);
int pow(int num, int p);
int is_number(char a);
int odd_bits_cnt(int a);

int main(int argc, char** argv)
{
	char input[4096];
 for(;;)
 {
  putchar('>');
  scan(input);
  printf("%d\n", odd_bits_cnt(hextodec(input)));
 }
	return 0;
}
int odd_bits_cnt(int a)
{
 int result = 0;
	for(int i = 0; i != 8*sizeof(int); ++i)
 {
  if((i + 1) % 2 == 1)
   result += (a >> i) & 1;
 }
 return result;
}
void scan(char* str)
{
 char input;
 int counter = 0;
 do
 {
  input = getchar();
  if(is_valid(input))
   str[counter++] = input;
 }while(input != '\n');
 str[counter] = '\0';
}

int is_valid(char c)
{
 return (c <= 'f' && c >= 'a') || (c <= 'F' && c >= 'A') || (c <= '9' && c >= '0');
}

int to_upper(char c)
{
 if(c <= 'f' && c >= 'a') 
  return c + 'A' - 'a';
 else
  return c;
}

int str_length(char* str)
{
 int counter = 0;
 while(str[counter] != '\0')
 {
  counter++;
 }
 return counter;
}

int pow(int num, int p)
{
 int result = 1;
 for(int i = 0; i != p; ++i)
 {
  result *= num;
 }
 return result;
}

int is_number(char a)
{
	return a >= '0' && a <= '9';
}

int hextodec(char* num)
{
 int result = 0;
 int len = str_length(num);
 for(int i = 0; i != len; ++i)
 {
  if(is_number(num[i]))
  {
   result += (num[i] - '0') * pow(16, len - i - 1);
   //printf("|%d %d|", num[i] - '0', len - i - 1);
  }
  else
  {
   result += (10 + (int)to_upper(num[i]) - (int)'A') * pow(16 , len - i - 1);
   //printf("|%d %d|", 10 + (int)to_upper(num[i]) - (int)'A', len - i - 1);
  }
 }
 return result;
}
Соседние файлы в предмете Информатика
  • #
    29.05.20198.61 Кб0sem3_3
  • #
    29.05.20191.1 Кб0sem3_3.c
  • #
    29.05.20198.61 Кб0sem4_1
  • #
    29.05.20191.53 Кб0sem4_1.c
  • #
    29.05.20198.65 Кб0sem4_2
  • #
    29.05.20191.78 Кб0sem4_2.c
  • #
    29.05.20198.46 Кб0sem5_1
  • #
    29.05.2019720 б0sem5_1.c
  • #
    29.05.20198.4 Кб0sem6_1
  • #
    29.05.2019237 б0sem6_1.c
  • #
    29.05.20198.43 Кб0sem6_2