资源描述
/*1、素数是指只能被自己和1整除的数*/
#include <math>
int prime(int n)
{
int m;
for(m=2;m<=sqrt(n);m++)
if(n%m==0) return 0;
return 1;
}
/*2、求逆序数通用函数。说明第二参数b是指变换方式:0常规;2-4不管输入位数,只要小于或等于它,输出凑足相应位数,例如b=3;输入1,返回100*/
long retrograde(long a, int b)
{ long m=a,y=0;
int i;
switch(b)
{ caes 2: return m+(m/10-m%10)*(1-10);
case 3: return m+(m/100-m%10)*(1-100);
case 4: return m+(m/1000-m%10)*(1-1000)+(m/100)%10*(10-100)-(m/10)%10*(10-100);
case 0: while(m) {y=y*10+m%10; m/=10;}
}
return y;
}
★ 例子:(b=0适用于回文数判别;b=3、4适用于陷阱数求取)
#include <stdio.h>
long retrograde(long a, int b)
{ long m=a,y=0;
int i;
switch(b)
{ case 2: return m+(m/10-m%10)*(1-10);
case 3: return m+(m/100-m%10)*(1-100);
case 4: return m+(m/1000-m%10)*(1-1000)+(m/100)%10*(10-100)-(m/10)%10*(10-100);
case 0: while(m) {y=y*10+m%10; m/=10;}
}
return y;
}
void main()
{ long a=12345,c=1;
printf("b=2 is %d\n",retrograde(c,2));
printf("b=3 is %d\n",retrograde(c,3));
printf("b=4 is %d\n",retrograde(c,4));
printf("b=0 is %d\n",retrograde(a,0));
}
/*3、寻找最大、最小通用函数(judge为1时,求最大值;0时求最小值)
/*4、求最大公约数 欧几里得算法:*/
int gcd( int m, int n)
{ int t,r;
if(m<n) {t=m; m=n; n=t;}
while(n!=0)
{ r=m%n; m=n; n=r; }
return m;
}
/*5、求最小公倍数 算法:两数之积除以最大公约数所得的值即为最小公倍数*/
int gcd( int m, int n)
{ int t,r;
while(n!=0)
{ r=m%n; m=n; n=r; }
return (m*n)/m;
}
/*6、整数的各位分离成一维整型数组元素*/
void inte(long n,int a[], int *k)
{ long m;k=0;
m=n;
while(m>0)
{ a[k++]=m%10; m=m/10; }
}
/*7、一维整型数值数组元素逆置 第一个与最后一个交换,第二个与倒数第二个交换…..*/
void exchange(int a[], int n)
{ int i, t;
for(i=0;i<n/2;i++)
{ t=a[i]; a[i]=a[n-i-1]; a[n-i-1]=t; }
}
如要将字符串倒序排列函数改为:
#include <stdio.h>
#include <string.h>
void exchange(char *a)
{ int i ,n; char t; n=strlen(a);
for(i=0;i<=n/2;i++)
{ t=a[i]; a[i]=a[n-i-1]; a[n-i-1]=t; }
}
void main()
{ char g[]="abcdefgh";
printf("before:%s\n",g);
exchange(g);
printf("after:%s\n",g);
}
/*8、求阶乘*/
long func(int n)
{ int i;
long t=1;
for(i=2;i<=n;i++) t*=i;
return t;
}
/*9、简单起泡法通用函数:以Fibonnacii数列中求质数后要求排序输出为例。judge=1时为升序;judge=0时为降序*/
/*10、求“正整型数”(包括1,但不包括数本身)的真因子及其之和通用函数*/
#include <stdio.h>
int fac(int n, int b[], int *p)
{ int k=0,s,i;
s=n;
for(i=2;i<=s;i++)
if(s%i==0) {b[k++]=s/i;} /*真因子数为k*/
*p=k;
s=0;
for(i=0;i<k;i++)
s=s+b[i];
return s;
}
void main()
{ int i,x,m,n,d[10];
scanf("%d",&x);
m=fac(x,d,&n); /*返回真因子之和m,真因子数组d[],真因子数n*/
for(i=0;i<n-1;i++)
printf("%d+",d[i]);
printf("%d=",d[n-1]);
printf("%d\n", m);
}
展开阅读全文