Sha256: 5ce859144211840a722b9b556e638df0f99690f6695e1b4c62592128899490b5

Contents?: true

Size: 1.17 KB

Versions: 108

Compression:

Stored size: 1.17 KB

Contents

#include "all_your_base.h"
#include <math.h>
#include <string.h>

size_t rebase(int8_t digits[DIGITS_ARRAY_SIZE], int16_t from_base,
              int16_t to_base, size_t num_digits)
{
   uint16_t denary = 0;
   size_t new_num_digits = 0;

   if ((from_base <= 1) || (to_base <= 1) || (num_digits == 0))
      return 0;                 /* invalid bases or length */
   if (digits[0] == 0)
      return 0;                 /* leading zeros */

   /* convert to denary */
   for (size_t i = 0; i < num_digits; ++i) {
      if (digits[i] < 0)
         return 0;              /* negative digits */
      if (digits[i] >= from_base)
         return 0;              /* invaid positive digit */
      denary += digits[i] * pow(from_base, (num_digits - i - 1));
   }

   /* calculate number of new digits */
   for (uint16_t j = denary; j > 0;) {
      j /= to_base;
      ++new_num_digits;
   }

   /* calculate and store new digits */
   for (size_t i = new_num_digits - 1; denary > 0; --i) {
      digits[i] = denary % to_base;
      denary /= to_base;
   }

   /* ensure rest of array is zero */
   memset(&digits[new_num_digits], 0, DIGITS_ARRAY_SIZE - new_num_digits);

   return new_num_digits;
}

Version data entries

108 entries across 108 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/c/exercises/all-your-base/src/example.c
trackler-2.2.1.179 tracks/c/exercises/all-your-base/src/example.c
trackler-2.2.1.178 tracks/c/exercises/all-your-base/src/example.c
trackler-2.2.1.177 tracks/c/exercises/all-your-base/src/example.c
trackler-2.2.1.176 tracks/c/exercises/all-your-base/src/example.c
trackler-2.2.1.175 tracks/c/exercises/all-your-base/src/example.c
trackler-2.2.1.174 tracks/c/exercises/all-your-base/src/example.c
trackler-2.2.1.173 tracks/c/exercises/all-your-base/src/example.c
trackler-2.2.1.172 tracks/c/exercises/all-your-base/src/example.c
trackler-2.2.1.171 tracks/c/exercises/all-your-base/src/example.c
trackler-2.2.1.170 tracks/c/exercises/all-your-base/src/example.c
trackler-2.2.1.169 tracks/c/exercises/all-your-base/src/example.c
trackler-2.2.1.167 tracks/c/exercises/all-your-base/src/example.c
trackler-2.2.1.166 tracks/c/exercises/all-your-base/src/example.c
trackler-2.2.1.165 tracks/c/exercises/all-your-base/src/example.c
trackler-2.2.1.164 tracks/c/exercises/all-your-base/src/example.c
trackler-2.2.1.163 tracks/c/exercises/all-your-base/src/example.c
trackler-2.2.1.162 tracks/c/exercises/all-your-base/src/example.c
trackler-2.2.1.161 tracks/c/exercises/all-your-base/src/example.c
trackler-2.2.1.160 tracks/c/exercises/all-your-base/src/example.c