-
-
Notifications
You must be signed in to change notification settings - Fork 4.5k
[feat/fix/docs]: Improved on conversion code , length variable , asserts added #840
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from 3 commits
67eeefe
0008c67
7185941
6e5e561
905b80c
e771021
157f6d1
bbb6024
82e1f41
1e4c396
166dc0b
57bcffa
129f4b0
8526600
61bed00
4d91c9d
8defb93
6397733
45e4eff
6553640
09df4a4
63cf38c
e078df2
0b199fb
f66cd1b
fd82d9e
ebf83bb
63a9a16
a2ca660
81ab47c
0f96de5
254cabf
8c1b548
8632490
8fa92c5
4ab5a25
da73878
71c17ee
c3433f7
53e719b
af4b346
aa8e55b
0d61a4a
82fb3ae
9612325
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,24 +1,54 @@ | ||
/** | ||
* Modified 07/12/2017, Kyler Smith | ||
* | ||
*/ | ||
|
||
#include <assert.h> | ||
#include <stdbool.h> | ||
#include <stdint.h> | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
|
||
bool is_binary(intmax_t num); | ||
int num_len(intmax_t num); | ||
|
||
int main() | ||
int main(void) | ||
{ | ||
int remainder, number = 0, decimal_number = 0, temp = 1; | ||
printf("\n Enter any binary number= "); | ||
scanf("%d", &number); | ||
intmax_t remainder, number = 0, decimal_number = 0, temp = 1; | ||
|
||
int length = num_len(INTMAX_MAX) - 1; | ||
printf("\n Enter any binary number , max %d digits: ", length); | ||
scanf("%jd", &number); | ||
assert(num_len(number) <= length); | ||
assert(is_binary(number)); | ||
|
||
// Iterate over the number until the end. | ||
while (number > 0) | ||
{ | ||
while (number > 0) { | ||
remainder = number % 10; | ||
number = number / 10; | ||
decimal_number += remainder * temp; | ||
temp = temp * 2; // used as power of 2 | ||
temp = temp * 2; // used as power of 2 | ||
} | ||
|
||
printf("%jd\n", decimal_number); | ||
return 0; | ||
} | ||
|
||
bool is_binary(intmax_t num) | ||
{ | ||
int remainder = 0; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Consider using There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. uintmax_t has the biggest length for machine running the code. I would prefer it over uint64_t which has a fixed size. |
||
|
||
while (num > 0) { | ||
remainder = num % 10; | ||
if (remainder == 0 || remainder == 1) { | ||
num /= 10; | ||
continue; | ||
} else | ||
return false; | ||
} | ||
return true; | ||
} | ||
|
||
printf("%d\n", decimal_number); | ||
int num_len(intmax_t num) | ||
{ | ||
int i; | ||
for (i = 0; num > 0; i++) { | ||
num /= 10; | ||
} | ||
return i; | ||
} |
Uh oh!
There was an error while loading. Please reload this page.