Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace Learn_SuperUglyNumber
- {
- class Program
- {
- static void Main(string[] args)
- {
- int number;
- Console.WriteLine("SUPER UGLY NUMBER");
- Console.Write("Please enter a number: ");
- string read = Console.ReadLine();
- number = int.Parse(read);
- int uglyNumber = Ugly_Number(number);
- Console.Write("Ugly Number: " + uglyNumber);
- Console.ReadKey();
- }
- private static int Ugly_Number(int number)
- {
- // cac gia tri dac biet
- if (number < 11)
- {
- if (number % 2 == 0) return number + 1;
- else return number + 2;
- }
- else if (number < 33) return 33;
- else if (number < 55) return 55;
- else if (number < 77) return 77;
- else if (number < 99) return 99;
- else if (number == 99) return 111;
- else if (number == 999) return 1111;
- else if (number == 9999) return 11111;
- // lay tong so hang
- int nLen = number.ToString().Length;
- // dua cac so hang vao trong mang
- int[] soHang = new int[nLen];
- int temp_Number = number;
- for (int i = nLen-1; i >= 0; i--)
- {
- soHang[i] = temp_Number % 10;
- temp_Number /= 10;
- }
- // lay truc doi xung
- float timTruc = (float)nLen / 2;
- int Truc = Convert.ToInt32(Math.Round(timTruc, MidpointRounding.AwayFromZero));
- int[] sieuXau = new int[Truc];
- // tim so sieu xau
- for (int i = 0; i < Truc; i++)
- {
- if (i > 0)
- {
- if (soHang[i - 1] < sieuXau[i - 1])
- {
- sieuXau[i] = 1;
- continue;
- }
- }
- if (soHang[i] % 2 == 0)
- {
- sieuXau[i] = soHang[i] + 1;
- if (sieuXau[i] > 9) Tang_Gia_Tri(ref sieuXau);
- if (sieuXau[i] > soHang[i])
- {
- for (int j = i + 1; j < Truc; j++) sieuXau[j] = 1;
- break;
- }
- }
- else sieuXau[i] = soHang[i];
- }
- if (Ghep_Sieu_Xau(sieuXau, nLen) <= number)
- {
- sieuXau[Truc-1] += 2;
- Tang_Gia_Tri(ref sieuXau);
- }
- return Ghep_Sieu_Xau(sieuXau, nLen);
- }
- private static int Ghep_Sieu_Xau(int[] sieuXau, int nLen)
- {
- string number = "";
- for (int i = 0; i < sieuXau.Length; i++)
- {
- number += sieuXau[i];
- }
- char[] newStr = number.ToCharArray();
- if (nLen % 2 == 0) number = number + Reverse(number);
- else number = number = number + Reverse(number.Substring(0, sieuXau.Length - 1));
- if (number == "") number = "0";
- int soSieuXau = int.Parse(number);
- return soSieuXau;
- }
- private static string Reverse( string s )
- {
- char[] charArray = s.ToCharArray();
- Array.Reverse( charArray );
- return new string( charArray );
- }
- private static void Tang_Gia_Tri(ref int[] sieuXau)
- {
- for (int i = sieuXau.Length-1; i >= 0; i--)
- {
- if (sieuXau[i] > 9)
- {
- for (int j = i; j >= 0; j--)
- {
- if (sieuXau[j] > 9) sieuXau[j] = 1;
- else
- {
- sieuXau[j] += 2;
- return;
- }
- }
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement