C# 大整数C的模#
我对int的模有个问题,它有31个字符。它似乎突然出现在C# 大整数C的模#,c#,c#-4.0,modulo,C#,C# 4.0,Modulo,我对int的模有个问题,它有31个字符。它似乎突然出现在 Int64 convertedNumber=Int64.Parse(mergedNumber)对于Int64太大或太小。(溢出异常)。如何修复它,使模不出错 class GeneratorRachunkow { private static string numerRozliczeniowyBanku = "11111155"; // 8 chars private static string identyfikatorN
Int64 convertedNumber=Int64.Parse(mergedNumber)值为的代码>对于Int64太大或太小。(溢出异常)
。如何修复它,使模不出错
class GeneratorRachunkow {
private static string numerRozliczeniowyBanku = "11111155"; // 8 chars
private static string identyfikatorNumeruRachunku = "7244"; // 4 chars
private static string stalaBanku = "562100"; // 6 chars
public static string generator(string pesel, string varKlientID) {
string peselSubstring = pesel.Substring(pesel.Length - 5); // 5 chars (from the end of the string);
string toAttach = varKlientID + peselSubstring;
string indywidualnyNumerRachunku = string.Format("{0}", toAttach.ToString().PadLeft(13, '0')); // merging pesel with klient id and adding 0 to the begining to match 13 chars
string mergedNumber = numerRozliczeniowyBanku + identyfikatorNumeruRachunku + indywidualnyNumerRachunku + stalaBanku; // merging everything -> 31 chars
Int64 convertedNumber = Int64.Parse(mergedNumber);
Int64 modulo = MathMod(convertedNumber, 97);
Int64 wynik = 98 - modulo;
string wynikString = string.Format("{0}", wynik.ToString().PadLeft(2, '0')); // must be 2 chars
indywidualnyNumerRachunku = wynikString + numerRozliczeniowyBanku + identyfikatorNumeruRachunku + indywidualnyNumerRachunku;
return indywidualnyNumerRachunku;
}
private static Int64 MathMod(Int64 a, Int64 b) {
return (Math.Abs(a * b) + a) % b;
}
}
您正在寻找的答案已演示。它包括各种方法来计算巨大数字的模数。我使用了与这里描述的国际银行账号类似的方法
与具有复制可复制方法的人的直接链接是。您正在寻找的答案已演示。它包括各种方法来计算巨大数字的模数。我使用了与这里描述的国际银行账号类似的方法
有复制可复制方法的人的直接链接是。Int64。MaxValue是9223372036854775807,共19个字符。所以你不能把它放进去。我建议您考虑使用大数字。Int64.MaxValue是9223372036854775807,即19个字符。所以你不能把它放进去。我建议您考虑使用大数字。Int64
的最大值为9223372036854775807
(打印时为19个字符)。您可能希望改用(在.NET 4中引入):
Int64
的最大值为9223372036854775807
(打印时为19个字符)。您可能希望改用(在.NET 4中引入):
尝试此函数而不是“MathMod”: (因为所有的数字都是正数,所以在原始MathMod函数中使用Math.Abs是没有意义的) 这样使用它:
modulo = ModString(mergedNumber,97);
这应该适用于自1.1以来的所有.NET版本,而不需要BigInteger。尝试使用此函数而不是“MathMod”: (因为所有的数字都是正数,所以在原始MathMod函数中使用Math.Abs是没有意义的) 这样使用它:
modulo = ModString(mergedNumber,97);
这应该适用于自1.1以来的所有.NET版本,而不需要BigInteger。完全脱离主题,但这是什么“口语”语言?我觉得这个词很搞笑:)31个字符的号码。。。代码中也对其进行了注释。它将多个值相加。@Darren Polish,与英语混合;)@达伦-波兰人,根据@MadBoy的个人资料来判断;)&<代码>识别驾驶员!从现在起,我的
Id
可能会爆炸成这样,只是为了好玩…完全脱离主题,但这是什么“口语”语言?我觉得这个词很搞笑:)31个字符的号码。。。代码中也对其进行了注释。它将多个值相加。@Darren Polish,与英语混合;)@达伦-波兰人,根据@MadBoy的个人资料来判断;)&<代码>识别驾驶员!从现在起可能会将我的Id
爆成这个,只是为了好玩…-1。这个问题绝对应该不用BigInteger来解决。我反对。我的答案完全可行。对正确答案投赞成票,对错误答案投反对票。事实上,你对“无用”的答案投反对票。检查工具提示。这个想法是最好的答案会出现在页面的顶部。其他人提出的观点是,biginger
是更好的解决方案,而不是你的答案是错误的。阅读我的答案,找到一个非常简单的解决方案,这个解决方案甚至不需要Int64。当然,我认为我的否决票有点反应过度,但现在不要让我删除它了。-1。这个问题绝对应该不用BigInteger来解决。我反对。我的答案完全可行。对正确答案投赞成票,对错误答案投反对票。事实上,你对“无用”的答案投反对票。检查工具提示。这个想法是最好的答案会出现在页面的顶部。其他人提出的观点是,biginger
是更好的解决方案,而不是你的答案是错误的。请阅读我的答案,了解一个非常简单的解决方案,它甚至不需要Int64。我认为我的否决票当然有点反应过度,但现在不要让我删除它。问题不在于计算。他甚至不能把值填入数字变量中。但是,是的,第二个环节可能会有所帮助。问题不在于计算。他甚至不能把值填入数字变量中。但是,是的,第二个链接可能会有帮助。谢谢,这似乎工作得很好。谢谢MathMod的更改。将对它进行更多的测试,看看它是如何运行的;-)谢谢,这似乎很好用。谢谢MathMod的更改。将对它进行更多的测试,看看它是如何运行的;-)有趣的方法。我也会测试它。谢谢给出了与弗雷德里克的答案完全相同的结果。我希望我能接受这两种方法。这是一种有趣的方法。我也会测试它。谢谢给出了与弗雷德里克的答案完全相同的结果。我希望两者都能接受。
modulo = ModString(mergedNumber,97);