1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
| #include <windows.h>
#include <stdio.h>
#include <conio.h>
void PumpMessages(HWND hWND);
char * num2bin(unsigned long lnum);
int main()
{
HWND hWnd = GetForegroundWindow();
long N,K,nCount = -1;
char str[19],*buf;
do
{
printf("Enter numbers:\r\n");
scanf("%[^\n]",str);
sscanf(str,"%u %u",&N,&K);
memset(str,'0',K);
str[K] = '\0';
while(0 < N)
{
if(strstr(buf = num2bin(N),str))
nCount++;
printf("bin %s\r\n",buf);
N--;
//Избегаем замерзания программы
PumpMessages(hWnd);
}
printf("%d numbers with square 10^%u\r\n",nCount,K);
}
while(toupper(getch()) == 'Y');
printf("Enter num: ");
unsigned long lnum;scanf("%u",&lnum);
printf("%s\r\n",num2bin(lnum));
getch();
return 0;
}
char * bin = (char *)malloc(sizeof(char));
char * num2bin(unsigned long lnum)
{
int i = 0;
do
{
bin[i] = '0';
if(lnum%2)
bin[i] = '1';
lnum /= 2;
if(0 < lnum)
bin = (char *)realloc(bin,(1 + (i = i + 1))*sizeof(char));
}
while(0 < lnum);
bin[i + 1] = '\0';
return bin;
}
void PumpMessages(HWND hWND)
{
MSG msg;
// Handle dialog messages
while(PeekMessage(&msg, hWND, 0, 0, PM_REMOVE))
if(!IsDialogMessage(hWND, &msg) && TranslateMessage(&msg))
DispatchMessage(&msg);
} |