First, convert decimal into binary.
#include<stdio.h>
#include<string.h>
#include<math.h>
void binary(int num){ // convert decimal into binary
int bit[33];
memset(bit,0,sizeof(bit));
bool flag = 0; // positve number
if(num < 0){
flag = 1;
num = -num;
}
int pos = 0;
while(num){
bit[pos++] = num % 2;
num = num / 2;
}
if(flag == 1){ // if it is negtive, reverse the binary and plus 1
for(int i = 0; i <= 31; i++){
bit[i] = 1 - bit[i];
}
for(int i = 0; i <= 31; i++){
if(bit[i] == 0) {
bit[i] = 1 - bit[i];
break;
}else{
bit[i] = 1 - bit[i];
}
}
}
for(int i = 31; i >= 0; i--){
printf("%d",bit[i]);
}
printf("\n");
}
int main(){
int num;
scanf("%d", &num);
binary(num);
}
Second, convert double into binary.
#include<stdio.h>
#include<string.h>
#include<math.h>
void binary(int num){
int bit[33];
memset(bit,0,sizeof(bit));
bool flag = 0; // positve number
if(num < 0){
flag = 1;
num = -num;
}
int pos = 0;
while(num){
bit[pos++] = num % 2;
num = num / 2;
}
if(flag == 1){
for(int i = 0; i <= 31; i++){
bit[i] = 1 - bit[i];
}
for(int i = 0; i <= 31; i++){
if(bit[i] == 0) {
bit[i] = 1 - bit[i];
break;
}else{
bit[i] = 1 - bit[i];
}
}
}
for(int i = 31; i >= 0; i--){
printf("%d",bit[i]);
}
}
#define eps 1e-6
void fraction(double num){
int bit[33];
memset(bit,0,sizeof(bit));
int pos = 0;
while(fabs(num) > eps && pos < 32){
num = num * 2;
bit[pos++] = (int)floor(num);
num -= 1;
}
for(int i = 0; i < 32; i++){
printf("%d",bit[i]);
}
printf("\n");
}
void dot(){
printf(".");
}
int main(){
double num;
scanf("%lf", &num);
double fractpart;
double intpart;
fractpart = modf(num, &intpart); // divide into two parts, deciaml part and fraction part.
binary((int)intpart);
dot();
fraction(fabs(fractpart));
}
Thrid, easy hash function.
#include<iostream>
#include<string>
using namespace std;
int hash(string s){ // add all the ASCII code of each character of the string and calclate the index.
int sum = 0, table_size = 200;
for(int i = 0 ;i < s.length();i++){
sum += (int)s[i];
}
return sum % table_size;
}
int main(){
cout <<"please input a string." << endl;
string s;
cin >> s;
cout << "index is " << hash(s) << endl;
}

本文详细介绍了如何将十进制整数和浮点数转换为二进制表示,包括负数和小数部分的处理。

被折叠的 条评论
为什么被折叠?



