// 返回:非负整数->阶乘 负数->-1
double fact(int n){
// 边界处理
if(n<0) return -1;
if(n==0 || n==1) return 1;
// 递推
double result=1;
for(int i=2;i<=n;++i){
result*=i;
}
return result;
}
// 返回:x的n次方
double mypow(double x,int n){
// 快速幂
double result=1;
double cur=x;
while(n>0){
if((n&1)==1) result*=cur;
cur*=cur;
n=n>>1;
}
return result;
}
// 返回:非负整数->阶乘 负数->-1
double fact(int n){
// 边界处理
if(n<0) return -1;
if(n==0 || n==1) return 1;
// 递推
double result=1;
for(int i=2;i<=n;++i){
result*=i;
}
return result;
}
// 返回:计算两点之间的距离
double dist(double x1,double y1,double x2,double y2){
return sqrt(pow(x1-x2,2)+pow(y1-y2,2));
}
// 返回:正数->1 负数->-1 0->0
int sign(int x){
if(x>0) return 1;
else if(x<0) return -1;
return 0;
}
// 返回:第n项fib数
int fib(int n){
// 边界处理
if(n<=2) return 1;
// 递推
int nums[2]={1,1};
for(int i=3;i<=n;++i){
// 滚动数组更新
int temp=nums[0];
nums[0]=nums[1];
nums[1]+=temp;
}
return nums[1];
}
// 返回:(年,月)->(天数)
int MonthDays(int year,int month){
// 月份数据
int days[13]={12
,31,28,31,30
,31,30,31,31
,30,31,30,31
};
// 若是闰年 则更新月份数据
if((year%4==0 && year%100!=0)
|| year%400==0){
++days[2];
}
return days[month];
}
// 返回:最大公约数
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
// 返回:素数->1 否则->0
int prime(int p){
// 边界处理
if(p<=1) return 0;
else if(p==2) return 1;
// 检查是否有除1和自身外的其他因数
int upper=sqrt(p)+1;
for(int i=2;i<=upper;i++){
if(p%i==0){
return 0;
}
}
return 1;
}
// 返回:[m,n]内所有素数的和
int PrimeSum(int m, int n){
// 边界处理
if(m>n) return 0;
int result=0;
for(int i=m;i<=n;++i){
if(prime(i)){
result+=i;
}
}
return result;
}
// 输出:一个实心的字符矩形
void matrix(int length, int width, char ch){
for(int i=1;i<=width;++i){
for(int j=1;j<=length;++j){
printf("%c",ch);
}
printf("\n");
}
return;
}