// 返回:[m,n]的整数之和
int sum(int m,int n){
return (m+n)*(n-m+1)/2;
}
// 返回:较大整数
int max(int a,int b){
return a>b?a:b;
}
// 输出:字符金字塔
void CharPyramid(int n,char ch){
for(int i=1;i<=n;++i){ // 第i行
for(int j=1;j<=n-i;++j) printf(" ");
for(int j=1;j<=i;++j) printf("%c ",ch);
if(i<=n-1) printf("\n");
}
return;
}
// 返回:正数->1 负数->-1 零->0
int sign(int x){
if(x>0) return 1;
else if(x<0) return -1;
return 0;
}
// 返回:奇数->0 偶数->1
int even(int n){
return n%2?0:1;
}
// 返回:线性表中所有奇数的和
int OddSum(int List[],int N){
int result=0;
for(int i=0;i<=N;++i){
if(even(List[i])==0){
result+=List[i];
}
}
return result;
}
// 返回:两点之间的距离
double dist(double x1,double y1,double x2,double y2){
return sqrt(pow(x1-x2,2)+pow(y1-y2,2));
}
// 返回:素数->1 否则->0
int prime(int p){
if(p<=1) return 0;
for(int i=2;i<=p/2;++i){
if(p%i==0){
return 0;
}
}
return 1;
}
// 返回:[m,n]区间内所有素数的和
int PrimeSum(int m,int n){
int result=0;
for(int i=m;i<=n;++i){
if(prime(i)){
result+=i;
}
}
return result;
}
// 返回:指定整数中指定数字的个数
int CountDigit(int number,int digit){
if(number==0){
if(digit==0) return 1;
else return 0;
}
int result=0;
if(number<0) number*=-1;
while(number>0){
if(number%10==digit) ++result;
number/=10;
}
return result;
}
// 返回:自幂数->1 否则->0
int narcissistic(int number){
// 求正整数的位数
int cnt=0;
int tmp=number;
while(tmp>0){
++cnt;
tmp/=10;
}
// 求幂和
int sumPow=0;
tmp=number;
while(tmp>0){
sumPow+=pow(tmp%10,cnt);
tmp/=10;
}
if(sumPow==number) return 1;
return 0;
}
// 输出:开区间内所有自幂数
void PrintN(int m,int n){
for(int i=m+1;i<=n-1;++i){
if(narcissistic(i)){
printf("%d\n",i);
}
}
return;
}
// 返回:非整负数的阶乘
double fact(int n){
if(n==0 || n==1) return 1;
double res=1;
for(int i=2;i<=n;++i) res*=i;
return res;
}
// 返回:余弦函数的近似值
double funcos(double e, double x){
double res=0;
int cnt=-1;
int flag=-1;
double numr=1,deno=1;
// do-while 等效写法,可读性更好
while(1){
// 更新参数
++cnt;
numr=pow(x,2*cnt);
deno=fact(2*cnt);
flag*=-1;
// 累和
res+=flag*numr/deno;
if(numr/deno<e){
break;
}
}
return res;
}
《《程序设计》函数题|001-010》有1条评论