
说说你的思路和想达到的目的,下面是正确的代码,你参考一下
#include<stdioh>
int main(void)
{
int i,j,k,n;
for(i=1;i<10;i++)
for(j=0;j<10;j++)
for(k=0;k<10;k++)
{
n=i100+j10+k;
if((i100+j10+k)==((iii)+(jjj)+(kkk)))
printf("水仙花数为:%d\n",n);
}
}
思路挺好,要注意的是x既然作为for循环控制变量,那么在循环体里边就不要改变x,正确代码如下:
#include <stdioh>
int main (void)
{
int x,y,i;
int sum = 0;
for(x=100; x<1000; x++)
{
y = x;
sum = 0;
for(i=1; i<=3; i++)
{
sum +=( (y%10)(y%10)(y%10) );
y/=10;
}
if(sum == x)
printf("%5d", x);
}
getchar();
return 0;
}
按照你的要求编写的C++水仙花数程序如下
#include <iostream>
using namespace std;
int main()
{
int i,a,b,c;
for(i=100;i<1000;i++){
a=i/100;
b=i/10%10;
c=i%10;
if(i==aaa+bbb+ccc){
cout<<i<<endl;
}
}
return 0;
}
运行结果
C#,使用Net6编写:
//水仙花数的搜索范围var index = 100; //因为水仙花数要求三位及以上,所以从100开始var end = 10000;
//循环主体 如上则范围为 [1,10000] 内寻找for (; index <= end; index++) {
//通过 log10 可以取得该数字的位数长度 int dg = (int)MathLog10(index) +1; //将 log10 的位数向下取整保留进制数量的整数(+1是因为后续包含个位数) //将每一位转换成数字(不使用 string 中 char 转 int,纯数字转换) var sum = 0; //分位累加器 var digits = new int[dg]; //创建一个用于单独储存每一位的 for(int i = dg; i > 0; i--)
{
var x = index - sum; //用于舍去高位,见 P1 int dplace = (int)MathPow(10, i-1); //当前位数的值,如 1,10,100,1000 var p = x / dplace; //当前位的值 sum += dplace p; //将前边已经取得的位计入累加用于在后续舍去(P1) digits[dg - i] = p; //将位数加在累加器上 }
//判断该数字是否符合条件 var nn = 0;
foreach(var d in digits)
{
nn += (int)MathPow(d, dg); //所有位 的位数幂 求和 }
if(nn == index) //当所有位的位数幂的和等于这个数本身时返回结果 {
ConsoleWriteLine($"{index} 是水仙花数");
}
}
以上就是关于c程求水仙花数程序全部的内容,包括:c程求水仙花数程序、水仙花数的程序……小白求教、怎么用C++写水仙花数呀等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)