I have a small program that converts a base 10 number into a kind of a base 36 number. Here’s the Python code, and it works as expected.
def numToKey(num):
start = 0x04;
i = 0;
for i in range(0,num):
start+=1
return start;
def largeNumToKeyboard(num):
a = num / 1296;
ar = num % 1296;
b = ar / 36;
c = ar % 36;
a = numToKey(a);
b = numToKey(b);
c = numToKey(c);
newb = b;
if(a == b):
newb = 0x2D;
if(c == b):
c = 0x2E;
print a,newb,c
print
largeNumToKeyboard(0)
largeNumToKeyboard(200)
The output is
4 45 46
4 9 24
“4 45 46” correctly represents 0, and “4 9 24” correctly represents 200.
But the issue is, it stops working after I convert it to C code.
#include <stdio.h>
int main(int argc, char **argv)
{
printf("hello worldn");
largeNumToKeyboard(0);
largeNumToKeyboard(200);
return 0;
}
char numToKey(char num) {
char start = 0x04;
char i = 0;
for (i = 0; i < num; i++) {
start++;
}
return start;
}
void largeNumToKeyboard(int num) {
char a = num / 1296;
char ar = num % 1296;
char b = ar / 36;
char c = ar % 36;
a = numToKey(a);
b = numToKey(b);
c = numToKey(c);
char newb = b;
if(a == b){
newb = 0x2D;
}
if(c == b){
c = 0x2E;
}
printf("%d ",a);
printf("%d ",newb);
printf("%drn",c);
}
Now the output is
4 45 46
4 45 46
I don’t understand why for an input of 200, the C code gives me the wrong output, but the python code gives the correct output. I have a feeling it has something to do with the modulus, but I can’t figure it out. Please help! Thanks!
Advertisement
Answer
Problem is you’re using char
types in the void largeNumToKeyboard(int num)
function, and the values you’re testing can potentially overflow a char
. You’ll need to change at least the first three to int
…
void largeNumToKeyboard(int num) {
int a = num / 1296;
int ar = num % 1296;
int b = ar / 36;
char c = ar % 36;
a = numToKey(a);
b = numToKey(b);
c = numToKey(c);
char newb = b;
if(a == b){
newb = 0x2D;
}
if(c == b){
c = 0x2E;
}
printf("%d ",a);
printf("%d ",newb);
printf("%drn",c);
}
…then it prints the output…
4 45 46
4 9 24