私は、整数からそのバイナリ表現に変換し、バイナリを逆にしてから整数に戻すCコードを書いています。うまく機能していますが、10^9までの入力値で機能する必要があります。今のところ、10^7より大きいものでは壊れているようです。つまり、10000000などの数値を入力し、17967657062982931584をバイナリ表現として取得します(小さい整数では正確ですが)。さらに、私のint_to_binaryがこの問題を経験している唯一の関数であるかどうか、または他の関数も大きな入力用に最適化する必要があるかどうかはわかりません。私が間違っているアイデアはありますか?ありがとうございました。
#include <stdio.h>
#include <string.h>
unsigned long long int_to_binary(unsigned long long k) {
if (k == 0) return 0;
if (k == 1) return 1;
return (k % 2) + 10 * int_to_binary(k/2);
}
unsigned long long reverse_int(unsigned long long l) {
unsigned long long reversed;
reversed = 0;
while (l > 0) {
reversed = reversed * 10 + (l%10);
l = l / 10;
}
return reversed;
}
unsigned long long binary_to_int(unsigned long long k) {
char binaryString[80];
snprintf(binaryString, 4, "%llu", k);
unsigned long long decimal = 0;
int length = strlen(binaryString);
int i = 0;
while(i < length) {
decimal = (decimal << 1) + (binaryString[i] - 0x30);
i++;
}
return decimal;
}
int main() {
int number;
printf("Enter a number: ");
scanf("%d", &number);
printf("You entered %d\n", number);
unsigned long long b = int_to_binary(number);
printf("In Binary, this is %llu\n", b);
unsigned long long c = reverse_int(b);
printf("When we reverse it, it looks like this: %llu\n", c);
unsigned long long d = binary_to_int(c);
printf("And when we convert that back to an int, it looks like this: %llu\n", d);
return 0;
}