- //7. 求两个整数的最大公约数
- #include<stdio.h>
- // 用穷举法求出最大公约数
- int gcd1(int m,int n)
- {
- int min = m > n ? n : m;
- while (min)
- {
- if (m%min == 0 && n%min == 0)
- {
- break;
- }
- else
- {
- min--;
- }
- }
- return min;
- }
- // 快速求最大公约数的算法, 称为辗转相除法, 以下用递归实现
- int gcd2(int m,int n)
- {
- if (n==0)
- {
- return m;
- }
- return gcd2(n, m%n);
- }
- int main()
- {
- int n, m;
- while (~scanf("%d%d",&m,&n))
- {
- //printf("最大公约数为:%d\n", gcd1(m, n));
- printf("最大公约数为:%d\n", gcd2(m, n));
- }
- return 0;
- }
- //8 水仙花数是指一个三位数, 它的各位数字的立方和等于其本身,/
- // 比如: 153=1^3+5^3+3^3, 输入一个整数, 判断它是否是水仙花数
- #include<stdio.h>
- int cube(int a)
- {
- return a*a*a;
- }
- int main()
- {
- int n;
- int temp;
- int g;// 个位
- int s;// 十位
- int b;// 百位
- int num[4];
- int sum;
- while (~scanf("%d",&n))
- {
- //temp 用来记录原来的 n, 因为后面 n 会被改掉
- temp = n;
- sum = 0;//sum 用来记录各数的立方和
- for (int i = 0; i < 3; i++)
- {
- num[i] = n % 10;
- sum += cube(num[i]);
- n /= 10;
- }
- if (sum==temp)
- {
- printf("此三位数是水仙花数 \ n");
- }
- else
- {
- printf("此三位数不是水仙花数 \ n");
- }
- /*g = n % 10;
- n /= 10;
- s = n % 10;
- n /= 10;
- b = n % 10;
- if (temp == (cube(g) + cube(s) + cube(b)))
- {
- printf("此三位数是水仙花数 \ n");
- }
- else
- {
- printf("此三位数不是水仙花数 \ n");
- }*/
- }
- return 0;
- }
- //9 完数的定义: 如果一个大于 1 的正整数的所有因子之和等于它的本身,
- // 则称这个数是完数, 比如 6,28 都是完数: 6=1+2+3;28=1+2+4+7+14 输入一个整数, 判断它是否是完数
- #include<stdio.h>
- int main()
- {
- int n;
- int temp;// 用来记录所有因子之和
- while (~scanf("%d",&n))
- {
- temp = 0;// 每次一次都要初始化一次
- for (int i = 1; i <= n / 2; i++)
- {
- if (n%i==0)
- {
- temp += i;
- }
- }
- if (temp==n)
- {
- printf("此数是完数 \ n");
- }
- else
- {
- printf("此数不是完数 \ n");
- }
- }
- return 0;
- }
来源: http://www.bubuko.com/infodetail-2507089.html