简单的乘法

Cod*_*ter 3 .net c#

让我们直截了当.我做了下面的代码来乘以两个数字,它正在"吃掉"我的零!对于不涉及产品(p)等于零的情况,似乎工作正常.在样本情况下,它只是打印"5"而不是所需的"500".如果有人愿意解释发生了什么,我真的很感激.:)

using System;
class Program
{
   static void Main()
   {
      Console.WriteLine(smallNumBigNumProduct("5", "100"));
   }

   static string smallNumBigNumProduct(string s, string b)
   {
      int l = s.Length;
      int f = int.Parse(s); // factor
      int c = 0; // carry
      string r = ""; // result
      int p; // product

      while(l-- > 0)
       {
          p = (Convert.ToInt32(b[l]) - 48) * f;
          p += c;

          if (p > 9)
          {
            r = Convert.ToString(p % 10) + r;
            c = p / 10;
          }

          else
            r = Convert.ToString(p) + r;
       }

       if (c > 0)
       {
         r = Convert.ToString(c) + r;
       }

   return r;
   }
}
Run Code Online (Sandbox Code Playgroud)

Ode*_*ded 5

这是你的问题:

int l = s.Length;

...

while(l-- > 0)
Run Code Online (Sandbox Code Playgroud)

您将l变量设置为字符串的长度,然后在while循环中预先递减它.

简而言之,您的循环不会执行您认为的次数.如果不是l变量设置为长度b字符串?

无论如何,这看起来像是一个很长且容易出错的方法.为什么不简单地将输入字符串转换为整数并直接返回产品?

  • 那么,.NET 4.0中引入的[BigInteger](http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx)不适合你吗? (2认同)
  • @Codetester - 听起来像你在问题中应该提到的那种约束.解释_why_你必须编写这样的代码将有助于获得适当的答案. (2认同)