🍀作者简介:在校学生,为全栈方向努力拼搏的一名小学生。
🍁个人主页:吉师职业混子博客
🫒题目来源:C程序设计(第五版)
🍂相应专栏:清览题库--C语言程序设计第五版编程题解析
因为python和C同时学,现在混得差不多了(悲
求两数的最大公约数和最小公倍数
输入两个正整数m和n,求其最大公约数和最小公倍数
输入示例:
3 6
输出示例:
最大公约数:3 最小公倍数:6
首先要明确我们需要的数字是什么,就是二者共有的因数。
既然要求最大公约数,自然要用到循环
因为在本题中我们要通过循环来不断试错,最终找寻到最大公约数,也就是除数,所以设该除数的变量名为c,那么这个c就一定要不为0,因此for循环中第一个表达式就应该是
for (c=1;;)
针对于for循环中第二个表达式,我个人不喜欢在for中的表达式规定,所以在for循环的内部语句中再细说。
关于第三个表达式,我们要求的是最大的公约数,所以与其从0开始向上不断叠加相乘,不如把该除数的初始值设为一个极大的数字,从而由上至下向下减,虽然这样设置会大大增加对内存的占用(相对来说),但这只是一个简单的小作业,只要老师不故意找茬,就无伤大雅。
所以经过一系列思路分析,最终的for语句应该是
for (c=1000000000000;;c--)
那么接下来,针对for循环的内部语句进行分析
我第一次去思考这里的代码时,想的是只有当除到最后的两个数互质才可以结束循环,结果就是我花费了一点时间去思考如何判断两个数互质,实际上压根一点用没有。这对于初学者来说应该是个坑吧(悲)
完整代码
- #include
- int main()
- {
- int i,s,m,n;
- scanf("%d %d",&i,&s);
- m=10;
- for (;;m--)
- {
- if (i%m==0&&s%m==0){
-
- n = i/m*s;
- break;
- }
- }
- printf("最大公约数:%d\n",m);
- printf("最小公倍数:%d\n",n);
-
-
- return 0;
- }
输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数字本身。例如,153是一个水仙花数,因为
输入示例:
无
输出示例:
153 370 371 407
没啥好解析的,注意范围是三位数,分别用除数和余数来分离出三个位数上的数字、幂的形式和引用的文件就可以了。
这是源代码
- #include
- #include
- int main()
- {
- int a,b,s,g;
- for (a = 100;a >= 100;a++)
- {
-
- s = a%100/10;
- b = a/100;
- g = a%100%10;
-
- if (pow(s,3)+pow(b,3)+pow(g,3) == a)
- {
-
- printf("%d\n",a);
-
- }
- else if (a==999)
- break;
- else
- continue;
- }
- return 0;
- }
烦了,毁灭吧