c - Printing to output: integer as sum of powers of 2 -


i had exam, , i've been struggling ever since. have array of integers(ex. 13, 6, 21, 4), , need make output looks like:

13 = 2^3 + 2^2 + 2^0 6 = 2^2 + 2^1 21 = 2^4 + 2^2 + 2^0 4 = 2^2 

here's i've got far.

#include <stdio.h> #define max 100  int main() {     int niz[max], nizb, n, i, ones, k;      while(1) {         printf("array length: ");         scanf("%d", &n);          if (n<=0 || n>max) break;          printf("array elements: ");         for(i=0;i<n;i++){             scanf("%d", &niz[i]);             if (niz[i] <=0) {                 printf("error! wrong value. enter new one: ");                 scanf("%d", &niz[i]);             }         }          for(i=0;i<n;i++) {             nizb = niz[i];             ones = 0;              for(k=0; k < 16; k++) {                 //what should here?             }          }      } } 

i'm stuck here. dont know how many bits should use, , how c sees bits of integer. i'm using var 'k' add string in format '2^3 + 2^2 ...', k value of 'for' iteration. have made assumption length of integer 16, im not sure since on sheet of paper.

i want big everyone!!!

not sure has twos-complement (which particular way of representing negative numbers). trying express integer sum of powers of 2, apparently. here's way i'd it, isn't better or worse other answers...

void powersum(int n) { int powers[sizeof(int) << 3];   int i;   char *sep = "";    printf("%d = ", n);    powers[0] = 0;    (i = 0; n; n >>= 1, ++i)     powers[i] = n & 1;    while (--i >= 0)   { if (powers[i])     { printf("%s2^%d", sep, i);       sep = " + ";     }   }    printf("\n"); } 

edit: here's version doesn't use stack-allocated array, tradeoff has go around loop more (once each bit, opposed looping until highest 1-bit found):

void powersum2(int n) { int = (sizeof(int) << 3) - 2;   int m = 1 << i;   char *sep = "";    printf("%d = ", n);    while (m)   { if (n & m)     { printf("%s2^%d", sep, i);       sep = " + ";     }     m >>= 1;     --i;   }    printf("\n"); } 

Comments

Popular posts from this blog

blackberry 10 - how to add multiple markers on the google map just by url? -

php - guestbook returning database data to flash -

delphi - Dynamic file type icon -