-
Notifications
You must be signed in to change notification settings - Fork 60
/
Copy pathmain.cpp
154 lines (134 loc) · 3.42 KB
/
main.cpp
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#include <stdio.h>
#include <string>
#include <iostream>
#include <stdlib.h>
using namespace std;
void toWords(int x);
int isItBinary(long long int x);
int main(int argc, char *argv[])
{
int x;
unsigned long long int n;
n=atoi(argv[1]);
x=isItBinary(n);
if(x>0)
{
cout<<"Szukana liczba to ";
toWords(x);
}
}
void toWords(int x)
{
string words[5][9]={{"jeden", "dwa", "trzy", "cztery", "pięć","sześć","siedem","osiem","dziewięć"},
{"jedenaście","dwanaście","trzynaście","czternaście","piętnaście","szesnaście","siedemnaście","osiemnaście","dziewiętnaście"},
{"dziesięć","dwadzieścia","trzydzieści","czterdzieści","pięćdziesiąt","sześćdziesiąt","sziedemdziesiąt","osiemdziesiąt","dziewięćdziesiąt"},
{"sto","dwieście","trzysta","czterysta","pięćset","sześćset","siedemset","osiemset","dziewięćset"},
{"tysiąc","tysiące","tysięcy"}};
if(x>=1000000)
{
if(x==1000000)
cout<<"Milion"<<endl;
};
int digit[6];
for(int i=5; i>=0; i--)
{
digit[i]=x%10;
x/=10;
};
int n=0;
if(digit[0]>0) //Setki tysięcy
{
n=digit[0];
cout<<words[3][n-1]<<" ";
};
if(digit[1]>0) //Dziesiątki tysięcy
{
if(digit[1]==1&&(digit[2]!=0))
{
n=digit[1];
cout<<words[1][n-1]<<" "<<words[4][2]<<" ";
}else
{
n=digit[1];
cout<<words[2][n-1]<<" ";
};
};
if(digit[2]>=0) //Tysiące
{
if(digit[2]==1&&(digit[0]==0&&(digit[1]==0)))
cout<<words[4][0]<<" ";
else if(digit[2]>1)
{
n=digit[2];
cout<<words[0][n-1]<<" ";
if(n==1 || n==5 || n==6 || n==7 || n==8 || n==9)
cout<<words[4][2]<<" ";
else if(n==2 || n==3 || n==4)
cout<<words[4][1]<<" ";
}else if(digit[2]==0&&(digit[0]>0||digit[1]>0))
cout<<words[4][2]<<" ";
};
if(digit[3]>0) //Setki
{
n=digit[3];
cout<<words[3][n-1]<<" ";
};
if(digit[4]>1) //Dziesiątki
{
n=digit[4];
cout<<words[2][n-1]<<" ";
}else if(digit[4]==1&&(digit[5]>0))
{
n=digit[5];
cout<<words[1][n-1]<<" ";
}else if(digit[4]==1&&(digit[5]==0))
cout<<words[2][0]<<" ";
if(digit[5]>0&&(digit[4]!=1)) //Jedności
{
n=digit[5];
cout<<words[0][n-1]<<" ";
};
cout<<endl;
}
int isItBinary(long long int x)
{
int k, j, o; //stworzyłem zmienną o żeby móc zrobić kopię zmiennej j, która później będzie zmieniać swoją wartość
bool isBinary;
int *w;
for(k=2; k<1000000; k++) //Główna pętla wewnątrz której szukane będzie k
{
j=x*k;
o=j;
if(j>100000)
{
cout<<"Ta liczba jest za duża i wychodzi poza skalę programu ;_;"<<endl; //Program liczy tylko do miliona więc trzeba się jakoś ograniczyć :v
return 0;
};
string number = to_string(o);
//}Zamieniłem wynik mnożenia na string, aby później sworzyć odpowiednio dużą tablicę
w = new int[number.length()];
for(int i=(number.length())-1; i>=0; i--) //Tutaj pętla umieszcza pojedyncze cyfry składające się na wynik mnożenia w tabeli
{
w[i]=j%10;
j/=10;
};
for(int i=0; i<((number.length())); i++) //Ta pętla sprawdza czy liczby umieszczone w tabeli są równe 0 lub 1
{
if(w[i]==0 || (w[i]==1))
{
isBinary = true; //Jeżeli tak to bool przyjmuje wartość 1
}
else
{
isBinary = false;
break;
};
};
if(isBinary==true) //I na koniec jeżeli wartość boola po wykonaniu pętli wynosi 1 to program wypisuje szukaną liczbę
{
cout<<"Iloczyn wynosi: ";
toWords(o);
return k;
}
};
}