算法小技巧(持续更新)

平时遇到一些比较巧妙的算法小技巧

1、秦九韶算法(求和)
在这里插入图片描述
一般做法

double p = 0,sum = 0;
for(int i=n-1;i>=0;i--)
{
	p = x*(a[i] + p);
	sum += p;
}

技巧做法

2、求3个数中的最大值(以整数为例)

int Max( int A, int B, int C )
{
    return A > B ? A > C ? A : C : B > C ? B : C;
}

原理:三目运算符(?:)的顺序是从右至左,故返回值相当于这种形式

A > B ? (A > C ? A : C) : (B > C ? B : C)

其实还有一种表达方法(这种可能好理解一点),如下:

(A > B ? A : B) > C ? (A > B ? A : B) : C

3、计算2的N次方(未完全掌握)

#include<iostream>
using namespace std;
int n,i,j;
int a[110];
int main()
{
    cin>>n;
    a[0]=1,a[1]=1;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=a[0];j++)//计算/* a[0]=1、a[1]=1 */ 
            a[j]*=2;
        for(j=1;j<=a[0];j++)//转为高精加
        {
            a[j+1]+=a[j]/10;
            a[j]%=10;
        }
        if(a[a[0]+1]>0)//进位
            a[0]+=1;
    }
    for(i=a[0];i>=1;i--)//倒序输出
        cout<<a[i];
    return 0;
}

试例:
在这里插入图片描述

发布了92 篇原创文章 · 获赞 35 · 访问量 6376

猜你喜欢

转载自blog.csdn.net/CourserLi/article/details/103596304
今日推荐