static void Main(string[] args)
{
for (int i = 100; i < 1000; i++)
{
string iStr = i + "";
if((iStr[0]*iStr[0]*iStr[0]) + (iStr[1] * iStr[1] * iStr[1]) + (iStr[2] * iStr[2] * iStr[2]) == i)
{
Console.WriteLine("水仙花数有"+i);
}
}
Console.ReadKey();
为什么这个程序不行呢?是if中条件太多还是我必须要先声明变量?
如果说字符串数组中的字符不能直接运算,那么
//for (int i = 100; i < 1000; i++)
//{
// int sum = 0;
// string iStr = Convert.ToString(i);
// for (int j = 0; j < iStr.Length; j++)
// {
// int num = Convert.ToInt32(iStr[j]);
// sum += num * num * num;
// }
// if (sum == i)
// {
// Console.WriteLine("水仙花数有"+i);
// }
//}
//Console.ReadKey();
这个同样也不成立;
但是如果只用int运算的话
for (int i = 100; i < 1000; i++)
{
int bai = i / 100;
int shi = (i % 100) / 10;
int ge = i % 10;
if (bai * bai * bai + shi * shi * shi + ge * ge * ge == i)
{
Console.WriteLine("水仙花数有"+i);
}
}
Console.ReadKey();
这个是成立的,很疑惑。求解答,我是不是走进了某个误区。。?
同学你好,第一种字符串之间是不能直接乘的,第二种同学是把int转成了string,再转回了int,为什么我们一定要用string呢,用int直接去计算更简化呀。这里有五种实现方法,同学可以看一下:
https://zhidao.baidu.com/question/550184630.html
还有之后提问的时候自己不要回答哦,否则老师收不到信息,或者可以艾特一下老师。
谢谢Trigger老师的解答,我的问题不在于算法,我想问的是为什么在第二种方式中我用string转int后不能计算,也就是说我想用数组的方式来处理水仙花数这个问题。老师您给的答案我看了
string s;
int i, j, k;
Console.WriteLine("水仙花数有:");
for (int n = 100; n < 1000; n++)
{
s = n.ToString(); //将数字n转化为字符串
i = s[0] - '0'; //获得百位上的数字
j = s[1] - '0'; //获得十位上的数字
k = s[2] - '0'; //获得个位上的数字
if (i * i * i + j * j * j + k * k * k == n)
Console.Write("{0,5}", n);
}
在这个程序中我尝试将i,j,k的赋值给转成int类型计算,也就是i=Convert.ToInt32(s[0])来计算,但是依然不对,我暂时不能理解为什么string类型-‘0’就可以参与计算但是不能转换成int计算,还有最后输出的{0,5}不是很懂。希望老师解答一下谢谢!