★最大公约数和最小公倍数
用穷举法求最大公约数iloop的思路:
1、穷举的范围是1到两个整数中的最小数;
2、可能的解是两个数分别除以iloop时都能整除,余数为0的那个iloop.
而最小公倍数等于两个数的积除以最大公约数。
#include<stdio.h> int max(int first,int second); int min(int first,int second); void main() { int n1=0,n2=0,imax=0,imin=0; printf("please input two number:\n"); scanf("%d%d",&n1,&n2); imax=max(n1,n2); imin=min(n1,n2); printf("max number is: %d\n",imax); printf("min number is: %d\n",imin); } int max(int first,int second) { int itmp=0,iloop=1; if(first>second) { itmp=first; first=second; second=itmp; } while(iloop<=first) { if(((first%iloop)==0)&&((second%iloop)==0)) itmp=iloop; iloop=iloop+1; } return itmp; } int min(int first,int second) { int itmp=0; itmp=first*second/max(first,second); return itmp; } |
★数字分解算法
试想想十进制数123,要怎样才能分解出1、2和3呢?
个位3当然是:123%10=3;十位2有点难度,不过想想就出来啦:12%10=2嘛,那12怎么来呢?123/10就等于12了嘛~~~至于1,用123除以100就出来啦~程序如下:
#include<stdio.h> void main() { int no=0,itmp=0; scanf("%d",&no); while(no>0) { itmp=no%10; printf("%d\n",itmp); no=no/10; } } |
★水仙花数
所谓水仙花数,是指一个3位的十进制数,该数各位数字的立方和等于该数本身。例如153是一个水仙花数,因为13+53+33=153.100到1000里当然还有几个水仙数,我们就交给电脑算吧~
#include<stdio.h> void main() { int ge=0,shi=0,bai=0,itmp=0,ino=0; for(ino=100;ino<1000;ino++) { ge=ino%10; shi=(ino/10)%10; bai=(ino/100)%10; itmp=ge*ge*ge+shi*shi*shi+bai*bai*bai; if(itmp==ino) printf("no is: %d\n",ino); } } |