diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml new file mode 100644 index 00000000..0e7dfa9e --- /dev/null +++ b/.github/workflows/c-cpp.yml @@ -0,0 +1,23 @@ +name: C/C++ CI + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: cppcheck-action + uses: deep5050/cppcheck-action@v2.0.0 + - name: make + run: make + - name: make check + run: make check + - name: make distcheck + run: make distcheck diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..32f9c531 --- /dev/null +++ b/Makefile @@ -0,0 +1,13 @@ +all: main sp + +main:main.cpp + $(CXX) main.cpp -o main + +sp:SuperPrime_HW.cpp + $(CXX) SuperPrime_HW.cpp -o sp + $(CXX) SuperPrime_HW2.cpp -o sp + +check: + + +distcheck: diff --git a/SuperPrime.cpp b/SuperPrime.cpp index 44e04a7c..50074af6 100644 --- a/SuperPrime.cpp +++ b/SuperPrime.cpp @@ -1,81 +1,57 @@ -class Number { +#include +#include +class Nature { +private: + int num; public: - Number(int num):mNum(num) { + Nature():num(0){ + std::cout << "Default Create Nature as " << num << std::endl; } - Number(const Number &n):mNum(n.mNum) { + Nature(int n):num(n) { + std::cout << "Create Nature as " << num << std::endl; } - ~Number(); - NumberSet split() { - NumberSet ns; - int n = mNum; - while(n != 0) { - int d = n % 10; - Number dig(d); - ns.add(dig); - n = n / 10; - } - return ns; + Nature(const Nature &nat):num(nat.num){ + std::cout << "Copy Create Nature as " << num << std::endl; } - bool isPrime() { - for(int i = 2; i < mNum; ++i) { - if(mNum % i == 0) - break; - } - if(i != mNum) - return false; - return true; + ~Nature() { + std::cout << "Destroy Nature as " << num << std::endl; } -private: - const int mNum; }; -class NumberSet { +class SuperPrime { private: - Number *nums[20]; - int size; + std::vector natures; public: - NumberSet() { - size = 0; - for(int i = 0; i < 20; ++i) - nums[i] = NULL; - } - ~NumberSet() { - for(int i = 0; i < size; ++i) - delete nums[i]; - } - bool add(const Number &n) { - if(size != 20 && nums[size] == NULL) { - nums[size] = new Number(n); - size += 1; - return true; - } - return false; + SuperPrime(int a, int b) { + std::cout << "Create SuperPrime from " << a << " to " << b << std::endl; + for(int i = a; i < b; i++) { + Nature nat(i); + std::cout << "HAHA" << std::endl; + natures.push_back(nat); + std::cout << "DDDDD" << std::endl; + } } - Number sum() { - Number sum(0); - for(int i = 0; i < size; ++i) { - if(nums[i] != NULL) - sum.add(*(nums[i])); + ~SuperPrime() { + std::cout << "Destroy SuperPrime " << std::endl; + } + + Nature max() { + std::vector::iterate it = natures.begin(); + Nature max(0); + for(; it != natures.end(); it ++) { + if(it->isSuperPrime()) { + if (max.compare(*it)) { + max = *it; + } + } } - return sum; + return max; } }; -class SuperPrime : public Number { -public: - SuperPrime(int num); - ~SuperPrime(); - - bool isPrime(); - - Prime sumBit(); - Prime multiBit(); - Prime sqaureSumBit(); -private: - const int num; -} -int main() -{ - SuperPrime sp(113); - if(sp.isPrime()) { - ; // do something - } -} +int main() { + SuperPrime sp(10, 13); + Nature n = sp.max(); + std::cout << "最大超级素数:" ; + n.show(); + + return 0; +} diff --git a/SuperPrime2.cpp b/SuperPrime2.cpp index 1f7d28d7..122b6bc8 100644 --- a/SuperPrime2.cpp +++ b/SuperPrime2.cpp @@ -1,124 +1,66 @@ -//作业:面向对象设计以下框架的代码细节,程序能编译运行得到正确结果 #include -class Prime { - public: - Prime():number(0) { - } - Prime(int n):number(n) { - } - ~Prime() { - } - bool isPrime() { - //2到number-1的因子 - return false; - } - private: - const int number; -}; -class PrimeSet { - public: - PrimeSet(int size) { - //集合的构造什么? - N = new Prime*[size]; - this->size = size; - index = 0; - } - ~PrimeSet() { - for (int i = 0; i < index; ++i) //销毁对象 - delete N[i]; - delete[] N; - } - bool add(int n) { - if(index == size) return false; - Prime *p = new Prime(n); - N[index] = p; - index += 1; - return true; - } - bool isAllPrime() { - for(int i = 0; i < index; i++) - if (!N[i]->isPrime()) - return false; - return true; - } - private: - Prime **N; - int size, index; +#include +class Nature { +private: + const int num; //数 +public: + Nature(int n):num(n) { + } + ~Nature(); + Nature add(Nature sp); //求和 + bool compare(Nature sp) { //比大小 + if(num > sp.num) + return true; + return false; + } + }; + class SuperPrime { - public: - SuperPrime():number(0), pset(3) { //为什么必须有? - } - SuperPrime(int n):number(n), pset(3) { - split(); //它就是构造对象 - } - ~SuperPrime() { - } - bool isSuperPrime() { - //怎么使用pset? - Prime p(number); - if (p.isPrime()) - return true; - return false; - } - private: - const int number; - PrimeSet pset; - void split() { //工厂方法设计模式 - // number split into N - int temp = number; - while(temp > 0) { - int n = temp % 10; - temp /= 10; - pset.add(n); //作业:单个数字为对象?还是和/积/平方和为对象? - } - } - int sum() { - return 0; - } - int multi() { - return 0; - } - int squareSum() { - return 0; - } -}; -class SuperPrimeSet { - public: - SuperPrimeSet(int from, int to) { - size = to - from; - for (int i = from; i < to; i++) - set[i-from] = new SuperPrime(i); - } - ~SuperPrimeSet() { - for(int i = 0; i < size; i++) - delete set[i]; - } - int count() { - int count = 0; - for (int i = 0; i < size; i++) - if(set[i]->isSuperPrime()) - count += 1; - return count; - } - int sum() { - int sum = 0; - /* - for (int i = 0; i < size; i++) - if(set[i].isSuperPrime()) - sum += set[i]; - */ - return sum; - } - private: - SuperPrime **set; - int size, index; +private: + std::vector range; //超级素数的容器 +public: + SuperPrime(int a, int b) { + for(int i = a; i < b; i++) { + Nature nat(i); + if(nat.isSuperPrime()) //过滤器 + range.push_back(nat); + } + } + int max() { + for(std::vector::iterate it = range.begin(); + it != range.end(); it++) { + if(it->compare()) + } + return 0; + } + + int howmany() { + return range.size(); + } + int sum() { + for(std::vector::iterate it = range.begin(); + it != range.end(); it++) { + } + } +private: + void split(int x) { + int a, sum, mult, sqrsum; + while(x != 0) { + a = x % 10; + sum += a; + mult *= a; + sqrsum += a*a; + x = x / 10; + } + } }; -int main() { - SuperPrime sp(113); - if (sp.isSuperPrime()) - std::cout << "113 is SuperPrime" << std::endl; - else - std::cout << "113 is NOT SuperPrime" << std::endl; + +int main() +{ + SuperPrime sp(100, 999); + std::cout << "最大的超级素数:" << sp.max() << std::endl; + std::cout << "超级素数个数:" << sp.howmany() << std::endl; + std::cout << "超级素数的和:" << sp.sum() << std::endl; return 0; -} +} diff --git a/SuperPrime_HW.cpp b/SuperPrime_HW.cpp new file mode 100644 index 00000000..37876f96 --- /dev/null +++ b/SuperPrime_HW.cpp @@ -0,0 +1,39 @@ +#include +int judge(int x); + +int main() +{ + int i,cnt=0,sum=0,max; + for(i=100;i<1000;i++) + { + int t=i,b,a1=1,a2=0,a3=0; + do + { + b=t%10;a1*=b;a2+=b; + a3+=b*b;t/=10; + } + + while(t>0); + if(judge(i)==0&&judge(a1)==0&&judge(a2)==0&&judge(a3)==0) + { + cnt++; + sum+=i; + max=i; + } + } + printf("num:%d\n",cnt); + printf("sum:%d\n",sum); + printf("max:%d\n",max); +} + int judge(int x) +{ + int i; + for(i=2;i<=x;i++) + { + if(x%i==0&&i!=x) + break; + if(x%i==0&&i==x) + return 0; + } + return 1; +} diff --git a/SuperPrime_HW2.cpp b/SuperPrime_HW2.cpp new file mode 100644 index 00000000..37876f96 --- /dev/null +++ b/SuperPrime_HW2.cpp @@ -0,0 +1,39 @@ +#include +int judge(int x); + +int main() +{ + int i,cnt=0,sum=0,max; + for(i=100;i<1000;i++) + { + int t=i,b,a1=1,a2=0,a3=0; + do + { + b=t%10;a1*=b;a2+=b; + a3+=b*b;t/=10; + } + + while(t>0); + if(judge(i)==0&&judge(a1)==0&&judge(a2)==0&&judge(a3)==0) + { + cnt++; + sum+=i; + max=i; + } + } + printf("num:%d\n",cnt); + printf("sum:%d\n",sum); + printf("max:%d\n",max); +} + int judge(int x) +{ + int i; + for(i=2;i<=x;i++) + { + if(x%i==0&&i!=x) + break; + if(x%i==0&&i==x) + return 0; + } + return 1; +} diff --git a/main.cpp b/main.cpp index 91307286..fec95e9b 100644 --- a/main.cpp +++ b/main.cpp @@ -1,4 +1,10 @@ -#include "HelloWorld.h" +class HelloWorld { +public: + HelloWorld() { + } + void hello() { + } +}; int main() { HelloWorld hw; hw.hello();