大一时写的代码,很菜
实验目的:
“水仙花数”是指一个3位数,其各位数字立方和等于该数本身,要求输出所以的“水仙花数”。
实验思路:
利用for函数循环,依次检测三位数。重点是如何提取各位数字,可以利用int定义a,b,c三个整型变量(分别代表百位,十位和个位),这样得到的数字如果是小数可以直接去除小数部分,定义要检测的数字为i,将i除以100得到a,将i减去100倍的a再除以10可以得到b,最后用i减去10倍的b和100倍的b可以得到c。定义变量k,给k赋值为i各位数字的立方和,运用if函数,若i等于k则输出i。为避免数字紧贴在一起,输出时用“\t”控制间距。
遇到的问题:运行后没有出现任何数字。
解决方法:
将“k=a^3+b^3+c^3;”改为“k=a*a*a+b*b*b+c*c*c;”。为了是程序更简洁,d可以用对i取除以10的余数来获得,而且,可以不用另外定义k,直接把i等于各位数字的立方和这个条件写到if函数里,即
修改前:
...
c=i-a*100-b*10;
k=a^3+b^3+c^3;
if(i==k)
printf("%d\t",i);
}
...
修改后:
...
c=i%10;
if(i==a*a*a+b*b*b+c*c*c)
printf("%d\t",i);
}
...
吸取的经验教训:
编程与数学不一样,不能像数学那样运用运算符号,比如在计算器或普通的电脑文件中的^是上标的意思,a^3在数学中可以代表a的立方,而在C语言中就不行,只能用a*a*a表示,只有这样电脑才能识别,一定要打破日常习惯思维,上课也要认真听讲。同时,要灵活运用整型变量的去除小数的特性,比如像这个题一样可以用来提取某个数字的各位数字,也可以依次输出各位数字,如第四章的判断数字的位数并倒序输出的课后习题。
参考代码:
#include<stdio.h> int main()
{int i,k,a,b,c;
for(i=100;i<=999;i++)
{a=i/100;
b=(i-a*100)/10;
c=i%10;
if(i==a*a*a+b*b*b+c*c*c)
printf("%d\t",i); }
printf("\n");
}