A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 楠瓜果 中级黑马   /  2014-7-11 14:41  /  1260 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

说让打印出三位数的水仙莲花,但是老师给的代码,有些过于复杂,不太明白什么意思,哪位大仙帮忙给解释一下,然后编个代码详细一些的,谢谢,只要输出三位数的就可以

5 个回复

倒序浏览
最关键的步骤就是把三位数的各个位分解出来,这是个很常用的算法。比如321,那么
3 = 321 / 100
2 = 321 % 100 / 10
1 = 321 % 10

一般来说,一个十进制N位数num,取得它从最右边数起的第k位(k >= 1)的公式是:num % (10^k) / (10 ^ (k-1))

代码如下
  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.     int num;
  5.     for(num = 100; num < 1000; num++)
  6.     {
  7.         int first = num / 100 // 百位
  8.         int second = num % 100 / 10 // 十位
  9.         int third = num % 10    // 个位
  10.         int sum_of_cube = first * first * first
  11.                    + second * second * second
  12.                    +third * third * third; // 各位数字的立方和
  13.         if(num == sum_of_cube)
  14.             printf("%d\n", num);
  15.     }
  16.     return 0;
  17. }
复制代码
回复 使用道具 举报
新手自己弄的,仅供参考。
我是在xcode上运行的。要是在其他环境下,你改下头文件。



  1. //
  2. // 输入两个数,求最小公倍数和最大公约数

  3. #import <Foundation/Foundation.h>




  4. int main(int argc, const char * argv[])
  5. {

  6.     @autoreleasepool {
  7.         int bai,shi,ge,num=100,count;   //定义num从100开始,
  8.         while(num<=999)     //因为只有三位数,跳出循环的条件设置为小于等于999
  9.         {   bai=num/100;        //获取百位上的数赋值给bai
  10.             shi=num%100/10; //获取十位数赋值给shi
  11.             ge=num%10;  //同上
  12.         if(num==bai*bai*bai+shi*shi*shi+ge*ge*ge)//判断是否百位数的3次方+十位数的3次方+各位数的3次方等于原来的num
  13.         {    count++;       //是,则count+1,且输出这个数
  14.             printf("%d ",num);
  15.             
  16.         }
  17.         num++;  //继续判断下个num是否是水仙花数
  18.     }
  19.         
  20.         printf("一共有%d个水仙花数",count);
  21.     }
  22.         return 0;
  23. }
复制代码
回复 使用道具 举报
什么是水仙莲花,第一次听说,能说明一下吗?
回复 使用道具 举报
余武超 发表于 2014-7-11 15:08
新手自己弄的,仅供参考。
我是在xcode上运行的。要是在其他环境下,你改下头文件。

我大概知道什么意思,但是我主要是想知道,水仙莲花是什么意思,思路是什么
回复 使用道具 举报
楠瓜果 发表于 2014-7-12 22:30
我大概知道什么意思,但是我主要是想知道,水仙莲花是什么意思,思路是什么 ...

。应该是水仙花数吧。水仙莲花我还真没听过。
水仙花数(三位数时)指的是这个数中的百位数的3次方+十位数的3次方+个位数的三次方等于这个数的本身,
如153 = 1的3次方+ 5的3次方 + 3的3次方。370 、371、 407这三个数也是水仙花数。
做题思路从100到999一个一个数字的判断
主要是先从三位数中获取它各个位上的数值。
还是以153例:
首先获取153的百位,int bai=153/100;即可以得到bai=1;
                                 int shi=153%100/10;153模100=53,然后53/10=5,shi=5,
                                 int ge=153%10,153模10的话就ge=3.
最后判断ge*ge*ge+shi*shi*shi+bai*bai*bai==153,所以这个数是水仙花数。
其他数字也是这么判断。一直到999结束。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马