一些常用的算法笔记(烂笔头,不断学习、搜集更新...)
2010-04-08 18:40
671 查看
1)闰年的计算方法:公元纪年的年数可以被四整除,即为闰年;被100整除而不能被400整除为平年;被100整除也可被400整除的为闰年。
2)辗转相除法求最大公约数和最小公倍数
先用辗转相除法求出最大公约数,然后再利用(最小公倍数=两数乘积/最大公约数)求得最小公倍数。
//非递归算法
int gcd(int a, int b)
{
int temp;
if(a < b) //swap(a,b) 交换a和b
{
temp=b;
b=a;
a=temp;
}
temp=0;
while((temp = a % b) != 0) //辗转相除
{
a = b;
b = temp;
}
return b;
}
//递归算法
int gcd (int a,int b)
{
if (b==0)
return a;
return gcd(b,a%b);
}
//非递归算法
int gcd(int a, int b)
{
int temp;
if(a < b) //swap(a,b) 交换a和b
{
temp=b;
b=a;
a=temp;
}
temp=0;
while((temp = a % b) != 0) //辗转相除
{
a = b;
b = temp;
}
return b;
}
//递归算法
int gcd (int a,int b)
{
if (b==0)
return a;
return gcd(b,a%b);
}
计算法N个数的最大公约数算法:
view plaincopy to clipboardprint?
int ngcd(int *pa, int n)
{
if(n == 1)
return *pa;
return (gcd(pa[n-1], ngcd(pa, n-1)));
}
int ngcd(int *pa, int n)
{
if(n == 1)
return *pa;
return (gcd(pa[n-1], ngcd(pa, n-1)));
}
计算最小公倍数算法:
view plaincopy to clipboardprint?
int lcm(int a, int b) //最小公倍数 = 两数乘积 / 最大公约数
{
return a*b/gcd(a, b);
}
int lcm(int a, int b) //最小公倍数 = 两数乘积 / 最大公约数
{
return a*b/gcd(a, b);
}
计算N个数的最小公倍数的算法:
view plaincopy to clipboardprint?
int nlcm(int *pa, int n)
{
if(n == 1)
return *pa;
return lcm(pa[n-1], nlcm(pa, n-1));
}
3)求一个整数的N进制数
//求一个数的n进制(为了打印方便n<=16,仅作演示)
#include <stdio.h>
//递归方法
void nHexRecursion(int x,int d)
{
if(x<d)
{
printf("%x", x);
}
else
{
nHexRecursion(x/d,d);
printf("%x",x%d);
}
}
//非递归
void nHexNonRecursion(int x,int d)
{
int output[100]; // 这种做法很恶心
int i=0;
while(x>0)
{
if(x/d)
{
output[i]=x%d;
}
else
{
output[i]=x;
}
x/=d;
i++;
}
while(--i>=0)
{
printf("%d",output[i]);
}
}
int main()
{
int num=16,dem=2;
printf("Please input the num:/n");
scanf("%d",&num);
printf("Please input the dimension:/n");
scanf("%d",&dem);
nHexRecursion(num,dem); // 递归调用
printf("/n");
nHexNonRecursion(num,dem); // 非递归调用
printf("/n");
return 0;
}
4) 打印素数
#include <stdio.h>
void PrintPrime(int start,int end)
{
for(int i=start;i<=end;i++)
{
int flag=1;
for(int j=2;j<i/2;j++)
{
if(i%j==0)
{
flag=0;
break;
}
}
if(flag)
{
printf("%d ",i);
}
}
}
int main()
{
PrintPrime(1,100);
return 0;
}
6)异号求余的规则:A%B=C,则C的值为:|A|%|B|的结果,让这个结果与A同号,然后在和B相加。比如:
|-15|%|4|=3,然后-3+4=1
如果是15%(-4),则结果为 3+(-4)=-1
注意一定是两数异号时才是这种规则,同号时跟一般的算法相同
2)辗转相除法求最大公约数和最小公倍数
先用辗转相除法求出最大公约数,然后再利用(最小公倍数=两数乘积/最大公约数)求得最小公倍数。
//非递归算法
int gcd(int a, int b)
{
int temp;
if(a < b) //swap(a,b) 交换a和b
{
temp=b;
b=a;
a=temp;
}
temp=0;
while((temp = a % b) != 0) //辗转相除
{
a = b;
b = temp;
}
return b;
}
//递归算法
int gcd (int a,int b)
{
if (b==0)
return a;
return gcd(b,a%b);
}
//非递归算法
int gcd(int a, int b)
{
int temp;
if(a < b) //swap(a,b) 交换a和b
{
temp=b;
b=a;
a=temp;
}
temp=0;
while((temp = a % b) != 0) //辗转相除
{
a = b;
b = temp;
}
return b;
}
//递归算法
int gcd (int a,int b)
{
if (b==0)
return a;
return gcd(b,a%b);
}
计算法N个数的最大公约数算法:
view plaincopy to clipboardprint?
int ngcd(int *pa, int n)
{
if(n == 1)
return *pa;
return (gcd(pa[n-1], ngcd(pa, n-1)));
}
int ngcd(int *pa, int n)
{
if(n == 1)
return *pa;
return (gcd(pa[n-1], ngcd(pa, n-1)));
}
计算最小公倍数算法:
view plaincopy to clipboardprint?
int lcm(int a, int b) //最小公倍数 = 两数乘积 / 最大公约数
{
return a*b/gcd(a, b);
}
int lcm(int a, int b) //最小公倍数 = 两数乘积 / 最大公约数
{
return a*b/gcd(a, b);
}
计算N个数的最小公倍数的算法:
view plaincopy to clipboardprint?
int nlcm(int *pa, int n)
{
if(n == 1)
return *pa;
return lcm(pa[n-1], nlcm(pa, n-1));
}
3)求一个整数的N进制数
//求一个数的n进制(为了打印方便n<=16,仅作演示)
#include <stdio.h>
//递归方法
void nHexRecursion(int x,int d)
{
if(x<d)
{
printf("%x", x);
}
else
{
nHexRecursion(x/d,d);
printf("%x",x%d);
}
}
//非递归
void nHexNonRecursion(int x,int d)
{
int output[100]; // 这种做法很恶心
int i=0;
while(x>0)
{
if(x/d)
{
output[i]=x%d;
}
else
{
output[i]=x;
}
x/=d;
i++;
}
while(--i>=0)
{
printf("%d",output[i]);
}
}
int main()
{
int num=16,dem=2;
printf("Please input the num:/n");
scanf("%d",&num);
printf("Please input the dimension:/n");
scanf("%d",&dem);
nHexRecursion(num,dem); // 递归调用
printf("/n");
nHexNonRecursion(num,dem); // 非递归调用
printf("/n");
return 0;
}
4) 打印素数
#include <stdio.h>
void PrintPrime(int start,int end)
{
for(int i=start;i<=end;i++)
{
int flag=1;
for(int j=2;j<i/2;j++)
{
if(i%j==0)
{
flag=0;
break;
}
}
if(flag)
{
printf("%d ",i);
}
}
}
int main()
{
PrintPrime(1,100);
return 0;
}
6)异号求余的规则:A%B=C,则C的值为:|A|%|B|的结果,让这个结果与A同号,然后在和B相加。比如:
|-15|%|4|=3,然后-3+4=1
如果是15%(-4),则结果为 3+(-4)=-1
注意一定是两数异号时才是这种规则,同号时跟一般的算法相同
相关文章推荐
- linux C 学习中的一些小笔记,不断更新
- linux C 学习中的一些小笔记,不断更新
- bootsrap3的学习笔记,一些常用的类名
- 常用的奇妙的小算法--不断更新中
- uCOSII学习笔记,不断更新
- springboot学习笔记-2 一些常用的配置以及整合mybatis
- (2)cocos2d-x的一些学习资料(不断更新)2012-9-25
- [STL]一些STL的学习笔记(持续更新)
- Java学习笔记----一些常用却不清楚的知识
- 放一些常用的链接(不断更新)
- Linux常用命令整理<学习笔记随时更新>
- java 数据库编程 学习笔记 不断更新
- STL中常用的一些算法函数[持续更新]
- [Python] Python学习笔记之常用模块总结[持续更新...]
- c++学习笔记序列之经典处理程序汇总(不断更新中)
- 随笔——学习的一些步骤及注意点(不断更新)
- ionic 项目的创建的一些常用配置(不断更新中)
- python学习笔记,不断更新
- 极化SAR一些常用知识总结(不断更新中)
- Java菜鸟学习笔记(4)--常见编译&运行错误汇集(不断更新)