平时遇到一些比较巧妙的算法小技巧
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;
}
试例: