Saturday, July 13, 2013

UVa 128 - Software CRC

Accepted date: 2011-12-05
Ranking (as of 2013-07-13): 122 out of 3150
Language: C++

/*
  UVa 128 - Software CRC

  To build using Visual Studio 2008:
    cl -EHsc -O2 software_crc.cpp
*/

#include <cstdio>

unsigned int calculate_crd(const char* line)
{
  unsigned int g = 34943;
  unsigned int remainder = 0;
  for ( ; *line; line++, remainder <<= 8) {
    remainder |= *line;
    remainder %= g;
  }
  remainder <<= 8;
  unsigned int crc = 0;
  if (remainder % g) {
    unsigned int quotient = remainder / g;
    crc = g * (quotient + 1) & 0xffff;
  }
  return crc;
}

int main()
{
  while (true) {
    const int nr_chrs_max = 1024;
    char line[nr_chrs_max + 1];
    gets(line);
    if (line[0] == '#')
      break;
    unsigned int crc = calculate_crd(line);
    printf("%02X %02X\n", (crc & 0xff00) >> 8, crc & 0xff);
  }
  return 0;
}

No comments:

Post a Comment