diffcolt
2015-03-04 20:14
1、有的童鞋说判断条件可以是<=999,这点是没有任何问题的。
<1000或者<=999都是没有任何问题的。
2、hd=num / 100;
打个比方,比如num=211。
211 / 100=2.11
因为你定义的是int类型,输出的也是整数类型。
所以计算机也不会给你四舍五入的计算,它只会
获得你的整数部分的数目。
3、td=(num%100) / 10;
根据上面的结论可以得出。
num=212;
211%100他只得到了两个数值:12;
但是我们需要个位的数值,所以我们还要除以10;
12/10=1.1;
根据上面结论可以得出,计算机只会取你的整数部分。
所以我们就轻松的获得了十位数的1;
4、sd=num % 10;
根据上面的结论可以得出一个怎么样的结果呢?
num=211;
212%10 = = 2;根据上面的结论可以自己算算。这里就不
多加解释。
二、很多聪明的童鞋有另外几种解释方法。
我也看入迷了。
比如获得个位数的数字可以用以下这种方法
num / 10 % 10
num=211;
211/10=11;
11%10=1;
这样我们也可以得到个位数;
三、有个童鞋的几行数据也让我耳目一新;
我也照葫芦画瓢的把数值带入进去算了一下;
以下是计算结果:
#define num = 100;
hd = (num-num%100)/100;
//同学方法
hd = (100-0)/100;
hd = 1;
//带入法
td = (num%100-num%10)/10;
td = (0-0)/10;
td = 0;
sd = num%10;
sd = 0;
这样三位数就得出来了。
四、还有童鞋最后的if(sum == hd*hd*hd+td*td*td+sd*sd*sd)
是不是少打了一个等于号结果就变了?我们来看看。
for(sum=100;sum<1000;sum++)
{
hd = sum / 100;
td = (sum%100) / 10;
sd = sum % 10;
if(sum = hd*hd*hd+td*td*td+sd*sd*sd)
//少打了一个等于号。这代表的是赋值,而不是等于!!
}
我们来一步一步带入数值看看为什么会出现那种结果:
sum=100;
hd = 1;
td = 0;
sd = 0;
因为if里面是赋值运算,并不是相等运算。
请看这两个式子
sum = 1;
sum == 1;
第一个的解释是把1这个数字赋值到sum里,并没判断他们相等
所以就会直接输出一个1字。
第二个的解释是sum是否等于1;100!=1的,所以不会输出内容,直到水仙花模式开启!
sum == 153;
这样就会输出153;
小伙伴就会问,那第一个式子往下走呢?
这里我就给大家带入看看。
因为sum = 1;
输出一个1之后,然后又进入for模式:
因为我给sum赋值了一个1;
所以for里面定义的变量就起不了作用。
我循环照样循环;
自增也照样自增。
然后 sum++就为2了。
hd = num /100;
其结果是小数,啪叽结果就为0;
td = (num%100)/10;
td = 2 /10;
又是小数。啪叽结果又为0;
sd = num % 10;
sd = 2 % 10
sd = 2;
进入if(num = 0+0+2*2*2)
又是赋值运算 num = 8;
输出一次是不是8呢?
因为是赋值运算,而不是判断。所以又一次输出num的结果。
小伙伴们可以继续往下算算哦!
111
啦啦啦
额v过
D项不是4列吗?[][3]怎么理解
里面任务题的答案在哪看
我感觉我看懂了,但是去填写代码的时候我级的无从下手
,,,
这个没问题
#include <stdio.h>
int main()
{
//定义三位数num,个位数sd,十位数td,百位数hd
int num, sd, td, hd;
//循环所有三位数
for(num=100;num<=999;num++)
{
//获取三位数字num百位上的数字
hd = num/100;
//获取三位数字num十位上的数字
td =(num/10)%10;
//获取三位数字num个位上的数字
sd =num%10;
//水仙花数的条件是什么?
if(hd*hd*hd+td*td*td+sd*sd*sd==num)
{
printf("水仙花数字:%d\n", num);
}
}
return 0;
}
#include <stdio.h>
int main()
{
//定义三位数num,个位数sd,十位数td,百位数hd
int num, sd, td, hd;
//循环所有三位数
for( sd=0,td=0,hd=0 ;sd<=9,td<=9,hd<=9 ;sd++,td++,hd++)
{
if(num=sd*sd*sd+td*td*td+hd*hd*hd)
{
if(num>=100)
{
printf("水仙花数字:%d\n", num);
}
}
}
return 0;
}
这么写行不
hd =num/100 ;
td =num%100/10
sd =num%10 ;
已通过
#include <stdio.h>
int main()
{
//定义三位数num,个位数sd,十位数td,百位数hd
int num, sd, td, hd;
//循环所有三位数
for(num=100;num<1000;num++)
{
//获取三位数字num百位上的数字
hd =num/100;
//获取三位数字num十位上的数字
td =num%100/10;
//获取三位数字num个位上的数字
sd =num%10;
//水仙花数的条件是什么?
if(num=hd^3+td^3+sd^3)
{
printf("水仙花数字:%d\n", num);
}
}
return 0;
}
#include <stdio.h> int main() { //Define a three digit named num,and his single digits named sd,ten digits named td,hundrend digits named hd int num, sd, td, hd; //Loop all three digits for(num = 100; num < 1000; num++) { //give me the hundrend digits hd = (int) num / 100; //give me the ten digits td = ((int) num % 100) / 10; //give me the Single digits sd = (int) num % 10; //what is thr Narcissistic number ? if(hd * hd * hd + td * td * td + sd * sd * sd == num) { printf("Narcissistic number : %d\n", num); } } return 0; }
Python
def Narcissistic_number(): return [i for i in xrange(100,1000) \ if (i/100)**3 + (i%100/10)**3 + (i%10)**3 == i]
我还能说些什么。。。。。。C。。。让我拿什么来爱你。。。。
哥哥,你第二种是求十位数的
我是这样的
//获取三位数字num百位上的数字
hd = num/100 ;
//获取三位数字num十位上的数字
td = num/10-hd*10 ;
//获取三位数字num个位上的数字
sd = num-hd*100-td*10 ;
我感觉智商有点不够用啊!!!
/*水仙花数算法*/
#include <stdio.h>
int main()
{
//定义三位数num,个位数sd,十位数td,百位数hd
int num, sd, td, hd;
printf("水仙花数有:\n");
//循环所有三位数
for(num=100;num<1000;num++)
{
//获取三位数字num百位上的数字
hd =num/100;
//获取三位数字num十位上的数字
td =num/10%10;
//获取三位数字num个位上的数字
sd =num%10;
//判断是否为水仙花数
if(num==hd*hd*hd+td*td*td+sd*sd*sd )
{
printf("%d\n", num);
}
}
return 0;
}
211%100=11
211%100
不会了怎么办
#include<stdio.h>
int main()
{
int td,sd,hd,num;
printf("水仙花数是;”);
for(num=100;num<1000;mum++)
{
td=num%10;//求个位
hd=num/100;//求百位
sd=num/10;//求十位
if(td*10+hd*100+sd*10=td*td*td+hd*hd*hd+sd*sd*sd)//符合水仙花
{
printf(%d,num);
}
}
return 0;
}
如何用两个数组实现两个大整数的加法
#include<stdio.h>
int main()
{
int i,j,k,n;
printf("parcissus numbers are");
for(n=100;n<=999;n++)
{
i=n/100;
j=n/10-i*10;
k=n%10;
if(n==i*i*i+j*j*j+k*k*k)
printf("水仙花数:%d ",n);
}
printf("\n");
return 0;
}
很好。
无聊!!
211%10
取余就是个位了
赞!赞!赞!赞!赞!赞!
#include <stdio.h>
int main()
{
//定义三位数num,个位数sd,十位数td,百位数hd
int num, sd, td, hd;
//循环所有三位数
for( num=100 ; num<1000 ; num++ )
{
//获取三位数字num百位上的数字
hd = num/100 ;
//获取三位数字num十位上的数字
td = (num-hd*100) /10 ;
//获取三位数字num个位上的数字
sd = num-hd*100-td*10 ;
//水仙花数的条件是什么?
if( hd*hd*hd+td*td*td+sd*sd*sd==num )
{
printf("水仙花数字:%d\n", num);
}
}
return 0;
}
我也来说说我的方法 我也被=坑了
#include <stdio.h>
int main()
{
//定义三位数num,个位数sd,十位数td,百位数hd
int num, sd, td, hd;
//循环所有三位数
for( num=100 ; num<1000 ; num++ )
{
//获取三位数字num百位上的数字
hd = num/100 ;
//获取三位数字num十位上的数字
td = (num-hd*100) /10 ;
//获取三位数字num个位上的数字
sd = num-hd*100-td*10 ;
//水仙花数的条件是什么?
if( hd*hd*hd+td*td*td+sd*sd*sd==num )
{
printf("水仙花数字:%d\n", num);
}
}
return 0;
}
提供一种方法
C语言入门
926894 学习 · 21464 问题
相似问题