c++水仙花数的编程是什么?
思路:
初始化i=100。
①取i的各位数,百位a,十位b,个位c。
②判断i==a∧3+b∧3+c∧3 是否成立。
③如果成立则输出,否则不输出。
④i=i+1,当i小于1000重复①,否则结束。
关键算法:取任意三位数的各位数。
①将数除以10取余数得个位c,将该数除以10。
②重复①得到十位b。
③继续重复①得到百位a。
代码实现:
int sum = 0; //求和变量。
int temp=i; //存放数值i,防被覆盖而丢失。
int rem; //余数。
for (int j = 0; j < 3; j++)//第一次循环得到个位立方和,第二次循环得到个位与十位立方和...
{ rem = temp % 10; temp /= 10; sum += rem * rem*rem;}
完整代码:
//输出水仙花void NarcissusNumber()
{ for (int i = 100; i < 1000; i++)
{ int sum = 0; int temp=i; int rem;
for (int j = 0; j < 3; j++)
{ rem = temp % 10; temp /= 10; sum += rem * rem*rem; }
if (sum == i) { printf("%d ", i);
}
}
}
算法一:除减法。
①将数除以100,由整型数据特点,小数点后被忽略,取得百位a。
②该数减去a * 100,除以10,得到十位b。
③该数减去a * 100和b * 10即得个位c。
好处:易理解,菜鸟基本都会这算法。
不足:当数字位数较大时,减法操作需要进行多次,比较代码比较冗长。
算法二:除余法。
①将数除以10取余数得个位c。
②将数除以10后再与10取余得到十位b。
③将该数除以100再与10取余得到百位a。
这种算法对我们菜鸟来说很新奇,难以想到。
即使这样,该算法也不比算法一简洁,所以需要改进。