Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 大整数C的模#_C#_C# 4.0_Modulo - Fatal编程技术网

C# 大整数C的模#

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

我对int的模有个问题,它有31个字符。它似乎突然出现在
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);