C# 简单乘法
让我们直截了当地说吧。我用下面的代码将两个数字相乘,它正在“吃掉”我的零!对于不涉及乘积(p)等于零的情况,它似乎可以很好地工作。在示例中,它只是打印“5”,而不是所需的“500”。如果有人愿意解释发生了什么事,我将非常感激 那么:C# 简单乘法,c#,.net,C#,.net,让我们直截了当地说吧。我用下面的代码将两个数字相乘,它正在“吃掉”我的零!对于不涉及乘积(p)等于零的情况,它似乎可以很好地工作。在示例中,它只是打印“5”,而不是所需的“500”。如果有人愿意解释发生了什么事,我将非常感激 那么: public static string smallNumBigNumProduct(string a, string b) { // NOTE no error checking for bad input or possibl
public static string smallNumBigNumProduct(string a, string b)
{
// NOTE no error checking for bad input or possible overflow...
int num1 = Convert.ToInt32(a);
int num2 = Convert.ToInt32(b);
return ((num1*num2).ToString());
}
如果您使用的是.NET 4.0(由于Gabe的提示而更新),则更好:
这是你的问题:
int l = s.Length;
...
while(l-- > 0)
您将l
变量设置为短字符串的长度,然后在循环中对其进行预减量
简而言之,您的循环执行的次数与您认为的次数不同。l
变量不应该设置为b
字符串的长度吗
无论如何,这看起来是一种很长且容易出错的方法。为什么不直接将输入字符串转换成整数并直接返回乘积?我不明白你的意思:大便。。。我刚刚看到了我的错误。一个字母的变量名伤害了你们和我。很好地使用了“goes to操作符”。-)@埃里克:我甚至没有意识到,即使有一个空间,接线员仍然可以工作。:)我已经纠正了这个错误!我想用b,不是l。稍有疏忽!谢谢我这样做的原因是能够用一个小数字乘以一个有几十位数字的数字。所以,在.NET 4.0中引入的方法对您不起作用?我用它来解决一个SPOJ问题,不确定是否可以在那里使用BigInteger。@Codetester-听起来像是您在问题中应该提到的那种约束。解释为什么必须编写这样的代码将有助于获得适当的答案。你真的认为名称中带有“BigNum”的函数可以通过Convert.ToInt32
实现吗?我的意思是,您至少要使用long
或decimal
。更不用说,即使是biginger
解决方案也会被破坏,因为它在执行乘法之前会转换为Int64
。
public static string smallNumBigNumProduct(string a, string b)
{
// NOTE no error checking for bad input or possible overflow...
BigInteger num1 = BigInteger.Zero;
BigInteger num2 = BigInteger.Zero;
bool convert1 = BigInteger.TryParse(a, out num1);
bool convert2 = BigInteger.TryParse(b, out num2);
return (convert1 && convert2) ? (num1*num2).ToString() : "Unable to convert";
}
int l = s.Length;
...
while(l-- > 0)