信息学奥赛之c++算法(三)水仙花数、回文数

网友投稿 2018-11-19 11:12

水仙花数:指一个三位数,数字本身等于各个位数上的立方之和。如153= 13+53+33,要求水仙花数,首先要学会分离百位、十位、个位上的数。用153/100可以得到百位上的数,(153/10)%10或(153%100)/10可得到十位上的数字,153%10可以得到个位上的数字。之后通过遍历100--999之间所有的数,对每一个数进行计算和判断,程序的流程图如下: 如果要计算水仙花数的个数,可以加一个统计变量,程序代码如下 : #include using namespace std; int main(){ int ge,shi,bai,count=0;  for(int i=100;i<1000;i++){ bai = i/100; shi = (i/10)%10; ge = i%10; if(bai*bai*bai+shi*shi*shi+ge*ge*ge==i){ cout<<i<<endl;< p=""> count++;  } } cout <<"水仙花数共有 "<<count<<" 个。";<="" p=""> return 0; }  程序运行结果: 再来看回文数:任意一个自然数,如果等于将它各个数位上的数字反向排列所得的自然数,这个数就是回文数。如12321,正着倒着念都一样。 回文数的算法,关键是怎样将原来的数反向排列并存储成另一个新的数,之后就可以通过比较两个数是否相等得到结果。假如用户输入一个旧的数old=123,我们可先将新的数new=0;运用整除运算先求出old的个位上数字3并使用new*10+3赋值给new,后将old/10,使他减掉最后一位数,再用同样的方法获得old当前的最后一位数2,再给new赋值:new=new*10+2,如此循环,下面我们介绍一种for循环的另一种写法: 因为输入的自然数位数不确定,因此分离数位的次数也不确定,但我们可以通过限定循环结束条件来使用,流程图和程序代码如下: #include     using namespace std; int main() {   int i,num,n,m;   cin>>num;   m=0;   n=num;   for(;n>0;)   {     m=m*10+n%10;     n=n/10;   }   if(m==num) cout<<"是回文数"<<endl;< p="">   else cout<<"不是回文数"<<endl;< p="">   return 0; } 程序执行结果:

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com