Unity - A计划(一年有效期) 扫二维码继续学习 二维码时效为半小时

(61评价)
价格: 2155.00元
if中的条件判断除了需要输出是bool值意外还要满足什么条件?
Kiki011发起了问答2019-05-27
4
回复
433
浏览

        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中条件太多还是我必须要先声明变量?

所有回复
  • Kiki011 2019-05-27

    如果说字符串数组中的字符不能直接运算,那么

                //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();

    这个是成立的,很疑惑。求解答,我是不是走进了某个误区。。?

     

    还有-5条回复,点击查看
    你还没有登录,请先登录注册
  • 老师_Trigger 2019-05-29

    同学你好,第一种字符串之间是不能直接乘的,第二种同学是把int转成了string,再转回了int,为什么我们一定要用string呢,用int直接去计算更简化呀。这里有五种实现方法,同学可以看一下:

    https://zhidao.baidu.com/question/550184630.html

    还有之后提问的时候自己不要回答哦,否则老师收不到信息,或者可以艾特一下老师。

    • Kiki011 2019-05-30

      谢谢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}不是很懂。希望老师解答一下谢谢!

      (0) 回复
    • 老师_Trigger 2019-05-30

      这个主要是ASII码的问题,可以看一下
      https://baike.baidu.com/item/ASCII/309296?fr=aladdin
      就是说字符‘0’代表的是48跟数字0本身是不一样,当然字符'1'跟数字1也是,等于他们都减掉了48。{0,5}不常用,意思是当前如果字符串的长度不足5时,空格补齐,同学输出会发现他们中间都间隔两个字符的长度,用这个目的就是为了分开,同学用console.writeLine也行。

      (0) 回复
    还有-3条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!