Re: [問題] 九九乘法表不用迴圈是叫我直接從1列到81?
http://coliru.stacked-crooked.com/a/fba5b7b3b253288d
#include <iostream>
#include <string>
struct table {
std::string s;
table() {}
~table() { std::cout << this->s; }
table(const int n) : s{std::to_string(n)} {}
table(std::string&& s_) : s{std::move(s_)} {}
table(table&& other) : s{other.take()} {}
table operator=(const int n) { return this->take() + " = " + std::to_string(n); }
table operator=(table&& rhs) { return this->take() + " = " + rhs.take(); }
std::string take() { const auto s = this->s; this->s.clear(); return s; }
bool empty() const { return this->s.empty(); }
const char& back() const { return this->s.back(); }
};
table operator++(table&& t, int) { return t.take(); }
table operator--(table&& t, int) { return t.take(); }
table operator-(table&& lhs, table&& rhs) { return lhs.take() + rhs.take(); }
table operator*(table&& lhs, table&& rhs) { return lhs.take() + " x " + rhs.take(); }
table operator||(table&& lhs, table&& rhs) { return lhs.take() + "\t" + rhs.take(); }
table operator|(table&& lhs, table&& rhs)
{ return lhs.empty() || lhs.back() == '\n' ? lhs.take() + rhs.take() : lhs.take() + "\n" + rhs.take(); }
table operator/(table&& lhs, table&& rhs) { return lhs.take() + "\n\n" + rhs.take(); }
#define x * (table)
#define o table{}
int main() {
o-------------------------------------------------------o
| 2 x 1 = 2 || 3 x 1 = 3 || 4 x 1 = 4 || 5 x 1 = 5 \
| 2 x 2 = 4 || 3 x 2 = 6 || 4 x 2 = 8 || 5 x 2 = 10 \
| 2 x 3 = 6 || 3 x 3 = 9 || 4 x 3 = 12 || 5 x 3 = 15 \
| 2 x 4 = 8 || 3 x 4 = 12 || 4 x 4 = 16 || 5 x 4 = 20 \
| 2 x 5 = 10 || 3 x 5 = 15 || 4 x 5 = 20 || 5 x 5 = 25 \
| 2 x 6 = 12 || 3 x 6 = 18 || 4 x 6 = 24 || 5 x 6 = 30 \
| 2 x 7 = 14 || 3 x 7 = 21 || 4 x 7 = 28 || 5 x 7 = 35 \
| 2 x 8 = 16 || 3 x 8 = 24 || 4 x 8 = 32 || 5 x 8 = 40 \
| 2 x 9 = 18 || 3 x 9 = 27 || 4 x 9 = 36 || 5 x 9 = 45 /
o------------++------------++------------++-------------o
| 6 x 1 = 6 || 7 x 1 = 7 || 8 x 1 = 8 || 9 x 1 = 9 \
| 6 x 2 = 12 || 7 x 2 = 14 || 8 x 2 = 16 || 9 x 2 = 18 \
| 6 x 3 = 18 || 7 x 3 = 21 || 8 x 3 = 24 || 9 x 3 = 27 \
| 6 x 4 = 24 || 7 x 4 = 28 || 8 x 4 = 32 || 9 x 4 = 36 \
| 6 x 5 = 30 || 7 x 5 = 35 || 8 x 5 = 40 || 9 x 5 = 45 \
| 6 x 6 = 36 || 7 x 6 = 42 || 8 x 6 = 48 || 9 x 6 = 54 \
| 6 x 7 = 42 || 7 x 7 = 49 || 8 x 7 = 56 || 9 x 7 = 63 \
| 6 x 8 = 48 || 7 x 8 = 56 || 8 x 8 = 64 || 9 x 8 = 72 \
| 6 x 9 = 54 || 7 x 9 = 63 || 8 x 9 = 72 || 9 x 9 = 81 /
o-------------------------------------------------------o;
}
------------------------------------------------------------------------------
$ g++ -std=c++17 -Wall -Wextra -pedantic -O2 -Wno-parentheses main.cpp && ./a.out
2 x 1 = 2 3 x 1 = 3 4 x 1 = 4 5 x 1 = 5
2 x 2 = 4 3 x 2 = 6 4 x 2 = 8 5 x 2 = 10
2 x 3 = 6 3 x 3 = 9 4 x 3 = 12 5 x 3 = 15
2 x 4 = 8 3 x 4 = 12 4 x 4 = 16 5 x 4 = 20
2 x 5 = 10 3 x 5 = 15 4 x 5 = 20 5 x 5 = 25
2 x 6 = 12 3 x 6 = 18 4 x 6 = 24 5 x 6 = 30
2 x 7 = 14 3 x 7 = 21 4 x 7 = 28 5 x 7 = 35
2 x 8 = 16 3 x 8 = 24 4 x 8 = 32 5 x 8 = 40
2 x 9 = 18 3 x 9 = 27 4 x 9 = 36 5 x 9 = 45
6 x 1 = 6 7 x 1 = 7 8 x 1 = 8 9 x 1 = 9
6 x 2 = 12 7 x 2 = 14 8 x 2 = 16 9 x 2 = 18
6 x 3 = 18 7 x 3 = 21 8 x 3 = 24 9 x 3 = 27
6 x 4 = 24 7 x 4 = 28 8 x 4 = 32 9 x 4 = 36
6 x 5 = 30 7 x 5 = 35 8 x 5 = 40 9 x 5 = 45
6 x 6 = 36 7 x 6 = 42 8 x 6 = 48 9 x 6 = 54
6 x 7 = 42 7 x 7 = 49 8 x 7 = 56 9 x 7 = 63
6 x 8 = 48 7 x 8 = 56 8 x 8 = 64 9 x 8 = 72
6 x 9 = 54 7 x 9 = 63 8 x 9 = 72 9 x 9 = 81
靈感來源:
Multi-Dimensional Analog Literals
http://www.eelis.net/C++/analogliterals.xhtml
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.193.217
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1531774190.A.3C0.html
推
07/17 10:37,
6年前
, 1F
07/17 10:37, 1F
→
07/17 15:30,
6年前
, 2F
07/17 15:30, 2F
→
07/17 15:58,
6年前
, 3F
07/17 15:58, 3F
→
07/17 16:31,
6年前
, 4F
07/17 16:31, 4F
推
07/17 16:50,
6年前
, 5F
07/17 16:50, 5F
推
07/17 17:07,
6年前
, 6F
07/17 17:07, 6F
推
07/17 23:47,
6年前
, 7F
07/17 23:47, 7F
推
07/20 00:32,
6年前
, 8F
07/20 00:32, 8F
推
07/23 08:42,
6年前
, 9F
07/23 08:42, 9F
討論串 (同標題文章)
完整討論串 (本文為第 6 之 29 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章