返回顶部

『嗨威说』常见的C++函数模板整理(一)

  开学两天,身上的职责直接变为两个班班长,三个小组组长,哇这事情估计够我忙活了,想躲都躲不掉啊,看来我还是真招人推荐各种管理职务啊,以后要是有人推荐我当经理啊领导啊该多好哈哈哈哈。记得今天奶奶生日,很开心地给奶奶打了一通电话,这怕是我第一次给奶奶电话送生日祝福了哈哈哈,是啊,很想珍惜身边的人,但很多时候却一心想提高自己地能力而忽视了身边人,就这四年,就这四年好好提升自己,毕业出来一定要好好陪陪家里祖辈亲戚们。

  今天有点特殊,我整理了一下学到这么久编程以来的一些模板和技巧,虽然还没整理完,就作为(一)吧,后面会慢慢更新(其实是今天解不出难题哭了,一天一道acm都要死了,可能自己训练量和能力远远不够吧,所以渣渣了,努力努力!)

 

 

今日推荐:

  今天心情很糟糕,每次心情很烂的时候总会去听听自己最最最喜欢的歌曲没有之一,去激励自己走出烂心情,希望读到这篇博客的读者们,也能轻松摆脱自己的烂心情,笑对人生~

《于是》 - 邓紫棋

 

  既然回不去了 我还在烦恼什么
  于是告诉自己不要哭
  我不要哭 我不能哭
  往前方的路走一步
  再走一步 就会幸福
  成长要学会独处
  虽然有一点孤独
 

链接:https://music.163.com/#/song?id=36198060&autoplay=true&market=baiduhd

 

 

(-> 001)分割数值(倒序输出)模板:

#include<iostream>
using namespace std;
int main()
{
    int num,k;
    cin >> num;
    while(num>0)
    {
        k = num % 10;
        cout<<k<<" ";
        num = num / 10;
    }
}

 

 

(-> 002)求A、B的最大公约数:

    法一:

long long gcd(long long m, long long n)
{
    return (m==0)?n:gcd(n%m, m);
}

    法二:

int gcd(int big, int small)
{
    if (small > big) swap(big, small);
    int temp;
    while (small != 0){ //  辗转相除法
        if (small > big) swap(big, small);
        temp = big % small;
        big = small;
        small = temp;
    }
    return(big);
}

 

 

(-> 003)求A与B的最小公倍数。 与上面函数配合使用。

long long lcm(long long a, long long b)
{
   return a / gcd(a, b) * b;
}

 

 

(-> 004)判断素数的方法:

    法一:

bool Sushu(int num)
{
    int sqrtO,test = 0;
    sqrtO = sqrt(num);
    for(int i = 2;i<=sqrtO;i++)
    {
        if(num%i==0) break;
        else test++;
    }
    if(test == (sqrtO -1)) return 1;
    else return 0;
}

    法二:

bool judge(int x){
    for(int i=2;i<sqrt(x);i++)
        if(x%i==0)
            return false;
    return true;
}

 

 

(-> 005)全排列输出:

void Pern(int list[], int k, int n) {   //  k表示前k个数不动仅移动后面n-k位数
    if (k == n - 1) {
        for (int i = 0; i < n; i++) {
            printf("%d", list[i]);
        }
        printf("\n");
    }else {
        for (int i = k; i < n; i++) {   //  输出的是满足移动条件所有全排列
            swap(list[k], list[i]);
            Pern(list, k + 1, n);
            swap(list[k], list[i]);
        }
    }
}

 

 

(-> 006)向量工具:

struct node {  
    double x; // 横坐标  
    double y; // 纵坐标  
};  

typedef node Vector;

Vector operator + (Vector A, Vector B) { return Vector(A.x + B.x, A.y + B.y); }  
Vector operator - (Point A, Point B) { return Vector(A.x - B.y, A.y - B.y); }  
Vector operator * (Vector A, double p) { return Vector(A.x*p, A.y*p); }  
Vector operator / (Vector A, double p) { return Vector(A.x / p, A.y*p); }  

double Dot(Vector A, Vector B) { return A.x*B.x + A.y*B.y; } // 向量点乘  
double Length(Vector A) { return sqrt(Dot(A, A)); }  // 向量模长  
double Angle(Vector A, Vector B) { return acos(Dot(A, B) / Length(A) / Length(B)); }  // 向量之间夹角  

double Cross(Vector A, Vector B) { // 叉积计算 公式  
    return A.x*B.y - A.y*B.x;  
}  

Vector Rotate(Vector A, double rad) // 向量旋转 公式  {  
    return Vector(A.x*cos(rad) - A.y*sin(rad), A.x*sin(rad) + A.y*cos(rad));  
}  

Point getLineIntersection(Point P, Vector v, Point Q, Vector w) { // 两直线交点t1 t2计算公式   
    Vector u = P - Q;   
    double t = Cross(w, u) / Cross(v, w);  // 求得是横坐标  
    return P + v*t;  // 返回一个点  
}  

 

 

(-> 007)组合公式:

long long int C(int m,int n) {
    int k=1;//相当于C(m,n)
    long long int ans=1;
    while(k<=n) {
        ans=((m-k+1)*ans)/k;
        k++;
    }
    return ans;
} 

 

 

(-> 008)大数阶乘公式:

string bigFactorial(int n){
    int ans[maxn],digit = 1;
    ans[0] = 1;
    for(int i = 2; i <= n; i++){
        int num = 0;
        for(int j = 0; j < digit; j++){
            int temp = ans[j]*i + num;
            ans[j] = temp%10;
            num = temp/10;
        }
        while(num != 0){
            ans[digit] = num%10;
            num /= 10;
            digit++;
        }
    }
    string str = "";
    for(int i = digit-1; i >= 0; i--)
        str += ans[i] + '0';
    return str;
}

 

 

(-> 009)杨辉三角打印:

#include<iostream>
#include<cstdlib>
using namespace std;
long long int s=1;
long long int h,i,j;

int main()
{
    while(cin>>h)
    {
        cout<<"1"<<endl;
        for (i = 2; i <= h; s= 1, i++)
        {
            cout<<"1 ";
            for (j = 1; j <= i - 2; j++)
            {
                cout<<(s = (i - j) * s / j)<<" ";
            }
            cout<<"1"<<endl;
        }
        cout<<endl;
    }
    return 0;
} 

 

 

(-> 010)其他整理:

    1、char c1,c2,c3的int型即为ASCII码

    2、cout << setprecision(2) << fixed << 固定精度输出

    3、printf("%.2lf\n",num)用于输出double类型数据并固定精度

    4、获取需要空格输入的段落:

char a[100];
cin.getline(a, 100)

    5、数组a[100]的清零操作 memset(a,0,sizeof(a)); 

    6、  getchar();//把回车符吃掉,否则下一句会出错

      gets(a); //读取整行
      length=strlen(a); //获得长度

 

 

   前阵子的一些小模板,积累了起来,贴在博客就方便自己或者有需要的人使用啦~ 我会继续更新这些比较实用常用的小模板呢~ 如有错误,希望评论指正哟~ 互相帮助才能更加成长~

 

posted @ 2019-02-26 23:38  HiCoding、嗨威  阅读(799)  评论(0编辑  收藏  举报