Beispiel #1
0
        public static LargeNumberModel operator +(LargeNumberModel left, LargeNumberModel right)
        {
            LargeNumberModel bigger  = left.NumberLength >= right.NumberLength ? left : right;
            LargeNumberModel smaller = left.NumberLength < right.NumberLength ? left : right;
            List <int>       result  = new List <int>();
            int highdigit            = 0;

            for (int i = bigger.NumberLength - 1, m = smaller.NumberLength - 1; i >= 0; i--, m--)
            {
                if (m >= 0)
                {
                    int digit = smaller.Digits[m] + bigger.Digits[i] + highdigit;
                    result.Add(digit % 10);
                    highdigit = digit / 10;
                    continue;
                }
                int digitb = bigger.Digits[i] + highdigit;
                result.Add(digitb % 10);
                highdigit = digitb / 10;
            }
            if (highdigit > 0)
            {
                result.Add(highdigit);
            }
            LargeNumberModel resultNum = new LargeNumberModel();

            result.Reverse();
            resultNum.Digits = result.ToArray();
            return(resultNum);
        }
 public LargeNumberModel NextLargeNumber()
 {
     LargeNumberModel temp = secondLNum;
     secondLNum = firstLNum + secondLNum;
     firstLNum = temp;
     return secondLNum;
 }
Beispiel #3
0
        public static LargeNumberModel operator *(LargeNumberModel left, int right)
        {
            List <int> result    = new List <int>();
            int        highdigit = 0;

            for (int i = left.NumberLength - 1; i >= 0; i--)
            {
                int digit = left.Digits[i] * right + highdigit;
                result.Add(digit % 10);
                highdigit = digit / 10;
            }
            while (highdigit > 10)
            {
                result.Add(highdigit % 10);
                highdigit = (highdigit / 10);
            }
            if (highdigit > 0)
            {
                result.Add(highdigit);
            }
            LargeNumberModel resultNum = new LargeNumberModel();

            result.Reverse();
            resultNum.Digits = result.ToArray();
            return(resultNum);
        }
 static bool CheckPalindromic(LargeNumberModel number)
 {
     string reverse = ReverseNumber(number).ToString();
     if (string.Equals(number.ToString(),reverse))
         return true;
     return false;
 }
 static LargeNumberModel Cube(int num)
 {
     LargeNumberModel result = new LargeNumberModel(num.ToString());
     result = result * num;
     result = result * num;
     return result;
 }
 public static LargeNumberModel operator *(LargeNumberModel left, LargeNumberModel right)
 {
     LargeNumberModel result = new LargeNumberModel("0");
     for (int i = 0; i < right.NumberLength; i++)
     {
         result = result + left * (right.Digits[i] * (int)Math.Pow(10, right.NumberLength - i - 1));
     }
     return result;
 }
Beispiel #7
0
        public static LargeNumberModel operator *(LargeNumberModel left, LargeNumberModel right)
        {
            LargeNumberModel result = new LargeNumberModel("0");

            for (int i = 0; i < right.NumberLength; i++)
            {
                result = result + left * (right.Digits[i] * (int)Math.Pow(10, right.NumberLength - i - 1));
            }
            return(result);
        }
 static bool CanGetPalindromicIn50Cycles(LargeNumberModel number)
 {
     LargeNumberModel temp = new LargeNumberModel(number.ToString());
     for (int i = 0; i < 50; i++)
     {
         LargeNumberModel reverse = ReverseNumber(temp);
         LargeNumberModel sum = temp + reverse;
         if (CheckPalindromic(sum))
             return true;
         temp = sum;
     }
     return false;
 }
 static void Main(string[] args)
 {
     string matrixNumbers = FileReader.ReadFile("Nums.txt", System.Text.Encoding.UTF8);
     string[] nums = matrixNumbers.Replace("\r\n", "|").Split('|');
     LargeNumberModel result = new LargeNumberModel("0");
     foreach (string num in nums)
     {
         LargeNumberModel ln = new LargeNumberModel(num);
         result = result + ln;
     }
     Console.WriteLine(result.ToString().Substring(0,10));
     Debug.WriteLine(result.ToString().Substring(0, 10));
     Console.Read();
 }
 static LargeNumberModel SeriesSum(int max)
 {
     LargeNumberModel result = new LargeNumberModel("0");
     for (int i = 1; i <= max; i++)
     {
         LargeNumberModel num = new LargeNumberModel(i.ToString());
         for (int j = 0; j < i - 1; j++)
         {
             num = num * i;
         }
         result = result + num;
     }
     return result;
 }
 static void Main(string[] args)
 {
     LargeNumberModel num = new LargeNumberModel("2"); // 11930336
     for (int i = 1; i < 1000; i++ )
         num = num * 2;
     Console.WriteLine(num);
     string result = num.ToString();
     int sum = 0;
     for (int i = 0; i < result.Length; i++)
     {
         sum += int.Parse(result.Substring(i, 1));
     }
     Console.WriteLine(string.Format("sum:{0}",sum));
     Console.Read();
 }
 static void Main(string[] args)
 {
     LargeNumberModel num = new LargeNumberModel("1");
     for (int i = 2; i <= 100; i++)
     {
         num = num * i;
     }
     int result = 0;
     foreach (int i in num.Digits)
     {
         result += i;
     }
     Console.WriteLine(result);
     Console.ReadLine();
 }
 static LargeNumberModel Pow(LargeNumberModel num, int pow)
 {
     if (pow < 0)
         throw new ApplicationException("Pow can not be smaller than 0");
     if (pow == 0)
         return new LargeNumberModel("1");
     if (pow == 1)
         return num;
     LargeNumberModel result = new LargeNumberModel(num.ToString());
     int basenum = int.Parse(num.ToString());
     for (int i = 1; i < pow; i++)
     {
         result = result * basenum;
     }
     return result;
 }
Beispiel #14
0
        public override bool Equals(object obj)
        {
            LargeNumberModel item = (LargeNumberModel)obj;

            if (this.NumberLength != item.NumberLength)
            {
                return(false);
            }
            for (int i = 0; i < this.NumberLength; i++)
            {
                if (this.Digits[i] != item.Digits[i])
                {
                    return(false);
                }
            }
            return(true);
        }
 static void Main(string[] args)
 {
     int count = 0;
     for (int i = 1; i <= 9; i++)
     {
         LargeNumberModel num = new LargeNumberModel(i.ToString());
         int pow = 1;
         while (true)
         {
             if (num.NumberLength != pow)
                 break;
             num = num * i;
             count++;
             pow++;
         }
     }
     Console.WriteLine(string.Format("result is {0}", count));
 }
 static void Main(string[] args)
 {
     int result = 0;
     for (int a = 1; a < 100; a++)
     {
         for (int b = 1; b < 100; b++)
         {
             LargeNumberModel la = new LargeNumberModel(a.ToString());
             LargeNumberModel powresult = Pow(la, b);
             int digitalSum = powresult.Digits.Sum();
             if (digitalSum > result)
                 result = digitalSum;
             Console.WriteLine("{0} ^ {1} = {2} ; digital sum = {3}", a, b, powresult.ToString(), digitalSum);
             
         }
     }
     Console.WriteLine("Result is {0}", result);
 }
Beispiel #17
0
        public static LargeNumberModel operator ++(LargeNumberModel left)
        {
            List <int> result    = new List <int>();
            int        highdigit = 1;

            for (int i = left.NumberLength - 1; i >= 0; i--)
            {
                int digitb = left.Digits[i] + highdigit;
                result.Add(digitb % 10);
                highdigit = digitb / 10;
            }
            if (highdigit > 0)
            {
                result.Add(highdigit);
            }
            LargeNumberModel resultNum = new LargeNumberModel();

            result.Reverse();
            resultNum.Digits = result.ToArray();
            return(resultNum);
        }
 public static LargeNumberModel operator *(LargeNumberModel left, int right)
 {
     List<int> result = new List<int>();
     int highdigit = 0;
     for (int i = left.NumberLength - 1 ; i >= 0; i--)
     {
         int digit = left.Digits[i] * right + highdigit;
         result.Add(digit % 10);
         highdigit = digit / 10;
     }
     while (highdigit > 10)
     {
         result.Add(highdigit % 10);
         highdigit = (highdigit / 10);
     }
     if (highdigit > 0)
     {
         result.Add(highdigit);
     }
     LargeNumberModel resultNum = new LargeNumberModel();
     result.Reverse();
     resultNum.Digits = result.ToArray();
     return resultNum;
 }
 public static LargeNumberModel operator ++(LargeNumberModel left)
 {
     List<int> result = new List<int>();
     int highdigit = 1;
     for (int i = left.NumberLength - 1; i >= 0; i--)
     {
         int digitb = left.Digits[i] + highdigit;
         result.Add(digitb % 10);
         highdigit = digitb / 10;
     }
     if (highdigit > 0)
         result.Add(highdigit);
     LargeNumberModel resultNum = new LargeNumberModel();
     result.Reverse();
     resultNum.Digits = result.ToArray();
     return resultNum;
 }
 static LargeNumberModel ReverseNumber( LargeNumberModel number)
 {
     LargeNumberModel result = new LargeNumberModel();
     result.Digits = number.Digits.Reverse().ToArray();
     return result;
 }
 static string SignNum(LargeNumberModel num)
 {
     string numStr = num.ToString();
     return new string(numStr.OrderBy(x => x).ToArray());
 }
 public static LargeNumberModel operator +(LargeNumberModel left, LargeNumberModel right)
 {
     LargeNumberModel bigger = left.NumberLength >= right.NumberLength ? left : right;
     LargeNumberModel smaller = left.NumberLength < right.NumberLength ? left : right;
     List<int> result = new List<int>();
     int highdigit = 0;
     for (int i = bigger.NumberLength - 1, m = smaller.NumberLength - 1; i >= 0; i--, m--)
     {
         if (m >= 0)
         {
             int digit = smaller.Digits[m] + bigger.Digits[i] + highdigit;
             result.Add(digit % 10);
             highdigit = digit / 10;
             continue;
         }
         int digitb = bigger.Digits[i] + highdigit;
         result.Add(digitb % 10);
         highdigit = digitb / 10;
     }
     if (highdigit > 0)
         result.Add(highdigit);
     LargeNumberModel resultNum = new LargeNumberModel();
     result.Reverse();
     resultNum.Digits = result.ToArray();
     return resultNum;
 }