【问题标题】:how to multiply odd position in a string如何将字符串中的奇数位置相乘
【发布时间】:2019-03-18 19:15:36
【问题描述】:

我有一个数字为 4353816274931243 的字符串,我想将字符串中的每个奇数位置相乘。所以最后它应该看起来像 831031611221441832283。

我尝试使用这样的 if 语句。

if(cijfer%2==0)
{ 
   cijfer = cijfer*2
}

但这只是在字符串中找到所有奇数并将它们相乘。 有没有人知道如何解决这个问题?

这是我已经拥有的部分代码。

string num;
int visanr, cijfer=0;

console.write("Enter visa number: ");
num=console.readline();
num = num.Replace(" ", "");

        visanr = num.Length;

        if (visanr==16)
        {
            for (int i = 0; i < visanr; i++)
            {
                string num1 = num.Substring(i, 1);
                cijfer = int.Parse(num1);

                if (cijfer%2==0)
                {
                    cijfer = cijfer * 2;
                }
            }
        }
        else
        {
            Console.Write("The visanumber " + num + " is not correct!");
        }

        Console.Read();

提前致谢

【问题讨论】:

  • 这似乎是家庭作业。我建议你自己试试。我可以在这里给出一些想法。 1. 使用 trim 函数删除多余的空间 2. 像字符数组一样迭代字符串并使用 for 循环让我们说 index = 0 3. 如果 index / 2 != 0 则索引位置为奇数并将 str[index] 解析为 int并乘以一个变量并继续这样做直到字符串的末尾。
  • 你应该阅读这个问题,它的最佳答案:stackoverflow.com/questions/21249670/…
  • 请不要在问题中加入语言名称。您已在问题中添加了语言标签,这就是我们将用来确定问题所涉及的语言的内容;在标题中添加冗余信息只是噪音。
  • 您想检查奇数位置,但您检查奇数的值是该位置的。您能解释一下为什么要检查值的奇数而不是位置吗?
  • 你使用int.Parse,但是如果我输入AAAABBBBCCCCDDDD呢?你希望那时会发生什么?面对糟糕的输入,你必须编写出健壮的程序;考虑使用TryParse

标签: c#


【解决方案1】:

请记住,字符串从索引 0 开始。因此,根据您的输入,您实际上希望将偶数位置上的数字相乘。

改变

if(cijfer%2==0)
{ 
   cijfer = cijfer*2
}

进入

if(i % 2 == 0)
{ 
   cijfer = cijfer*2
}

【讨论】:

    【解决方案2】:

    如果我理解正确,cijfer 是数字,所以 if (cijfer%2==0) 会找到所有偶数并将它们相乘。

    要找到所有奇怪的位置,我会建议这样的东西

    for (int i = 0; i < visanr; i++)
    {
        string num1 = num.Substring(i, 1);
        cijfer = int.Parse(num1);
    
        if (i%2==1)
        {
            cijfer = cijfer * 2;
        }
    }
    

    【讨论】:

      【解决方案3】:
      public static bool CheckLuhnCCNumber(string digits)
      {
          return digits.All(char.IsDigit) && digits.Reverse()
              .Select(c => c - 48)
              .Select((thisNum, i) => i % 2 == 0
                  ? thisNum
                  :((thisNum *= 2) > 9 ? thisNum - 9 : thisNum)
              ).Sum() % 10 == 0;
      }
      
      public static void Main()
      {       
          Console.Write("Enter visa number: ");
          string num = Console.ReadLine().Replace(" ", "");
      
          if (num.Length != 16 || !CheckLuhnCCNumber(num))
          {
              Console.Write($"The visa number {num} is not correct!");
          }
          else
          {
              //number length and checksum are OKAY
          }
      
          Console.ReadKey(true);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-15
        • 2023-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多