aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWalt Mankowski <waltman@pobox.com>2020-08-04 19:22:31 -0400
committerWalt Mankowski <waltman@pobox.com>2020-08-04 19:23:23 -0400
commitfa8582030c0fb7a2bc73e53d6dfa650e3debe49d (patch)
tree018258661f0c891dcbd7b60ca947d73c6ae64f48
parenta8b7f5a8afdfd405082d9b38003235e0336c76a5 (diff)
downloadperlweeklychallenge-club-fa8582030c0fb7a2bc73e53d6dfa650e3debe49d.tar.gz
perlweeklychallenge-club-fa8582030c0fb7a2bc73e53d6dfa650e3debe49d.tar.bz2
perlweeklychallenge-club-fa8582030c0fb7a2bc73e53d6dfa650e3debe49d.zip
C++ code for challenge 72
-rw-r--r--challenge-072/walt-mankowski/c++/.gitignore2
-rw-r--r--challenge-072/walt-mankowski/c++/Makefile23
-rw-r--r--challenge-072/walt-mankowski/c++/ch-1.cpp30
-rw-r--r--challenge-072/walt-mankowski/c++/ch-2.cpp29
4 files changed, 84 insertions, 0 deletions
diff --git a/challenge-072/walt-mankowski/c++/.gitignore b/challenge-072/walt-mankowski/c++/.gitignore
new file mode 100644
index 0000000000..ac77297bfe
--- /dev/null
+++ b/challenge-072/walt-mankowski/c++/.gitignore
@@ -0,0 +1,2 @@
+ch-1
+ch-2
diff --git a/challenge-072/walt-mankowski/c++/Makefile b/challenge-072/walt-mankowski/c++/Makefile
new file mode 100644
index 0000000000..0192513d07
--- /dev/null
+++ b/challenge-072/walt-mankowski/c++/Makefile
@@ -0,0 +1,23 @@
+CPP = /usr/bin/c++
+INCLDIRS =
+LIBDIRS =
+LIBS =
+CFLAGS = -std=c++17 -Wall -O3 $(INCLDIRS)
+OBJECTS1 = ch-1.o
+OBJECTS2 = ch-2.o
+
+all: ch-1 ch-2
+
+%.o: %.cpp
+ $(CPP) $(CFLAGS) -c $<
+
+ch-1: $(OBJECTS1)
+ $(CPP) -o $@ $(OBJECTS1) $(LIBDIRS) $(LIBS)
+
+ch-2: $(OBJECTS2)
+ $(CPP) -o $@ $(OBJECTS2) $(LIBDIRS) $(LIBS)
+
+clean:
+ rm -f *~
+ rm -f *.o
+ rm -f ch-1 ch-2
diff --git a/challenge-072/walt-mankowski/c++/ch-1.cpp b/challenge-072/walt-mankowski/c++/ch-1.cpp
new file mode 100644
index 0000000000..ba8c614fa1
--- /dev/null
+++ b/challenge-072/walt-mankowski/c++/ch-1.cpp
@@ -0,0 +1,30 @@
+#include <stdlib.h>
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+const unsigned long long fact(const int n) {
+ unsigned long long res = 1;
+ for (int i = 2; i <= n; i++)
+ res *= i;
+ return res;
+}
+
+const int num_trailing_zeros(const unsigned long long n) {
+ int cnt = 0;
+ unsigned long long pwr = 10;
+ while (n % pwr == 0) {
+ cnt++;
+ pwr *= 10;
+ }
+ return cnt;
+}
+
+int main(int argc, char *argv[]) {
+ int n = atoi(argv[1]);
+ unsigned long long f = fact(n);
+ int z = num_trailing_zeros(f);
+ string zeros = (z == 1) ? "zero" : "zeros";
+ cout << n << " as N! = " << f << " has " << z << " trailing " << zeros << endl;
+}
diff --git a/challenge-072/walt-mankowski/c++/ch-2.cpp b/challenge-072/walt-mankowski/c++/ch-2.cpp
new file mode 100644
index 0000000000..03f5d1c067
--- /dev/null
+++ b/challenge-072/walt-mankowski/c++/ch-2.cpp
@@ -0,0 +1,29 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <iostream>
+#include <fstream>
+#include <string>
+
+using namespace std;
+
+int main(int argc, char *argv[]) {
+ const string fname = argv[1];
+ const int a = atoi(argv[2]);
+ const int b = atoi(argv[3]);
+
+ ifstream infile(fname);
+ if (!infile) {
+ perror(fname.c_str());
+ exit(1);
+ }
+
+ int lineno = 1;
+ string s;
+ while (infile >> s) {
+ if (a <= lineno && lineno <= b)
+ cout << s << endl;
+ lineno++;
+ if (lineno > b)
+ break;
+ }
+}