蓝桥杯常用算法模板

本文介绍了几个基本的IT算法实现,包括判断素数、计算最大公约数、最上递增增长序列、进制转换、质因数分解以及大数加法,展示了编程中常见的数学运算在代码中的应用。
摘要由CSDN通过智能技术生成

 一、判断是否为素数

bool is_prime(int n){
    i=2;
    while(i<=sqrt(n)){
        if(n/i==0)
            return false;
        i++;
    }
    return true;
}

 二、最大公约数

int gbc(int a,int b){
    return b==0 ? a:gbc(b,a%b);    
}

三、最上递增增长序列

for ( j=1; j<len; j++ )
    for ( i=0; i<j; i++ )
        if ( a[j]>a[i] && dp[j]<dp[i]+1 )
            dp[j] = dp[i]+1;

四、进制长度(x>>=1表示右移动一位)

 int BitLength(int x)
      {
          int d = 0;
          while (x > 0) {
              x >>= 1;
              d++;
          }
          return d;
      }

五、质因数分解

void reduce(int n){
    int m=n;
    for(int i=2;i<m/2;i++){
        if(n%i==0)
            printf("%d ",i);
        n/=i;
    }
}

六、任意进制转化

void conversion(char s[], char s2[], long d1, long d2){
    int num=0,i,t;

    //按照进制 d1 将字符串 s 转换为十进制数 num
    for(i=0;s[i]!='\0';i++){
        if(s[i]<='9'||s[i]>='0') t=s[i]-'0'; else t=s[i]-'A'+10;
        num = num*d1 + t;
    }
    i=0;
    while(1){
        t=num%d2;
        if(t<=9) s2[i]=t+'0'; else s2[i]=t+'A'-10;
        num/=d2;
        if(num==0) break;
        i++;    
    }
    for(int j=0;j<i/2;j++){        //将字符逆置
        char c = s2[j];
        s2[j] = s2[i-j];
        s2[i - j] = c;
    }
    s2[j+1] = '\0';
}

七、大数加法

char [] add(char a[] , char b[]){

    if(strlen(a)<strlen(b)){
         char temp [] = {};
          strcpy(a,temp);
          strcpy(a,b);
          strcpy(b,temp);
    }
    len1 = strlen(a);
    len2 = strlen(b);
    int num1,num2,flag=0,num;
    while(len1>0){
        num1 = a[len1-1]-'0';
        if(len2>0)
            num2 = b[len2-1]-'0';
         else
            num2 = 0;
        num = nun1 + num2 +flag;
        a[len1-1] = num%10 + '0';
        flag = num/10;
        len1--;
        len2--;
    }
    if(flag==1)    
        a[len1] = '1';
    return a;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值