Skip to content

Instantly share code, notes, and snippets.

@ore-public
Last active August 29, 2015 14:04
Show Gist options
  • Save ore-public/5fa2e5023352d1a6acee to your computer and use it in GitHub Desktop.
Save ore-public/5fa2e5023352d1a6acee to your computer and use it in GitHub Desktop.
#include<stdio.h>
#include<stdlib.h>
#define MAX_N 10000000
void set_bit(char *sort_bit, int value, int bit);
int get_bit(char *sort_bit, int value);
int main(void) {
FILE *fp;
char buf[10];
char sort_bit[1250000];
int i, value;
if((fp = fopen("telno.txt", "r")) == NULL) {
fprintf(stderr, "file open error!!\n");
exit(EXIT_FAILURE);
}
for(i = 0; i < MAX_N; i++){
set_bit(sort_bit, i, 0);
}
while(fgets(buf, sizeof(buf), fp) != NULL) {
value = atoi(buf);
set_bit(sort_bit, value, 1);
}
fclose(fp);
if((fp = fopen("result.txt", "w")) == NULL) {
fprintf(stderr, "file open error!!\n");
exit(EXIT_FAILURE);
}
for(i = 0; i < MAX_N; i++) {
if(get_bit(sort_bit, i) == 1) {
fprintf(fp, "%07d\n", i);
}
}
fclose(fp);
return 0;
}
int get_bit(char *sort_bit, int value) {
int index;
int bit_index;
char flag;
index = value / 8;
bit_index = value % 8;
flag = 0x80 >> bit_index;
if((sort_bit[index] & flag) == 0) {
return 0;
} else {
return 1;
}
}
void set_bit(char *sort_bit, int value, int bit) {
int index;
int bit_index;
char flag;
index = value / 8;
bit_index = value % 8;
if(bit == 1){
flag = 0x80 >> bit_index;
} else {
switch(bit_index) {
case 0:
flag = 0x7f;
break;
case 1:
flag = 0xbf;
break;
case 2:
flag = 0xdf;
break;
case 3:
flag = 0xef;
break;
case 4:
flag = 0xf7;
break;
case 5:
flag = 0xfb;
break;
case 6:
flag = 0xfd;
break;
case 7:
flag = 0xfe;
}
}
if(bit == 1) {
sort_bit[index] = sort_bit[index] | flag;
} else {
sort_bit[index] = sort_bit[index] & flag;
}
}
@ore-public
Copy link
Author

おお、多分いけるね

@ore-public
Copy link
Author

いけた。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment