Добавил:
alex20000
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:sem4_2
.c#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;
}
Соседние файлы в предмете Информатика