zoukankan      html  css  js  c++  java
  • 艾伟_转载:.NET 4.0 Beta2中的BigInteger和Complex类 狼人:

    .NET4.0 Beta2中提供了新的System.Numerics命名空间,对应于System.Numerics.dll。该命名空间下就两个类BigInteger和Complex,我们来简单了解下
    这两个类的用法。

    BigInteger:任意大小的带符号整数

    1.Int64, SByte, UInt16, UInt32, and UInt64这些都有一个MinValue和MaxValue属性。而BigInteger没有这两个属性,因为它没有大小限制。
    2.不可变的类型.
    3.由于他没有大小限制,理论上当它足够大的时候会出现OutOfMemoryException异常.

    BigInteger初始化

    1.我们可以使用已有的数据类型来初始化BigInteger,如下:

    BigInteger bigIntFromDouble = new BigInteger(179032.6541);//会截取小点前的
    BigInteger bigIntFromInt64 = new BigInteger(934157136952);

    2.我们也可以使用超出现有数据类型范围的方式来得到BigInteger:

    byte[] bytes = { 5, 4, 3, 2, 1 };
    BigInteger number = new BigInteger(bytes);
    Console.WriteLine("The value of number is {0} (or 0x{0:x}).", number);
    //The value of number is 4328719365 (or 0x102030405).
    字节数组的第一个元素为16进制的最低位,依次升高.

    3.可以使用ParseTryParse方法将string的实例化为BigInteger:

    string positiveString = "91389681247993671255432112000000";
    string negativeString = "-90315837410896312071002088037140000";
    BigInteger posBigInt = 0;
    BigInteger negBigInt = 0;

    posBigInt = BigInteger.Parse(positiveString);
    Console.WriteLine(posBigInt);

    BigInteger.TryParse(negativeString, out negBigInt);
    Console.WriteLine(negBigInt);

    4. 还可以使用静态方法Pow如下:

    BigInteger number = BigInteger.Pow(Int64.MaxValue, 3);

    BigInteger支持所有的数学运算,我们可以完全象使用其他整数类型一样使用BigInteger

    Complex复数类

    1.var z1 = new Complex(); // this creates complex zero (0, 0)
    var z2 = new Complex(2, 4);
    var z3 = new Complex(3, 5);

    Console.WriteLine("Complex zero: " + z1);
    Console.WriteLine(z2 + " + " + z3 + " = " + (z2 + z3));

    Console.WriteLine("|z2| = " + z2.Magnitude);
    Console.WriteLine("Phase of z2 = " + z2.Phase);

    2.我们可以使用一个ComplexFormatter类来辅助我们做格式化输出,如下:

    using System;
    using System.Numerics;

    public class ComplexFormatter :IFormatProvider, ICustomFormatter
    {
    public object GetFormat(Type formatType)
    {
    if (formatType == typeof(ICustomFormatter))
    return this;
    else
    return null
    ;
    }

    public string Format(string format, object arg,
    IFormatProvider provider)
    {
    if (arg is Complex)
    {
    Complex c1 = (Complex) arg;
    // Check if the format string has a precision specifier.
    int precision;
    string fmtString = String.Empty;
    if (format.Length > 1) {
    try {
    precision = Int32.Parse(format.Substring(1));
    }
    catch (FormatException) {
    precision = 0;
    }
    fmtString = "N" + precision.ToString();
    }
    if (format.Substring(0, 1).Equals("I", StringComparison.OrdinalIgnoreCase))
    return c1.Real.ToString("N2") + " + " + c1.Imaginary.ToString("N2") + "i";
    else if (format.Substring(0, 1).Equals("J", StringComparison.OrdinalIgnoreCase))
    return c1.Real.ToString("N2") + " + " + c1.Imaginary.ToString("N2") + "j";
    else
    return
    c1.ToString(format, provider);
    }
    else
    {
    if (arg is IFormattable)
    return ((IFormattable) arg).ToString(format, provider);
    else if (arg != null)
    return arg.ToString();
    else
    return
    String.Empty;
    }
    }
    }

    3.使用如下:

    Complex c1 = new Complex(12.1, 15.4);
    Console.WriteLine("Formatting with ToString():" + c1.ToString());
    Console.WriteLine("Formatting with ToString(format): " + c1.ToString("N2"));
    Console.WriteLine("Custom formatting with I0:" + String.Format(new ComplexFormatter(), "{0:I0}", c1));
    Console.WriteLine("Custom formatting with J3:" + String.Format(new ComplexFormatter(), "{0:J3}", c1));

  • 相关阅读:
    OleDbCommand 的用法
    递归求阶乘
    C#重写窗体的方法
    HDU 5229 ZCC loves strings 博弈
    HDU 5228 ZCC loves straight flush 暴力
    POJ 1330 Nearest Common Ancestors LCA
    HDU 5234 Happy birthday 01背包
    HDU 5233 Gunner II 离散化
    fast-IO
    HDU 5265 pog loves szh II 二分
  • 原文地址:https://www.cnblogs.com/waw/p/2157079.html
Copyright © 2011-2022 走看看