************************************************************************/
************************************************************************/ #include<iomanip> // 精度控制头文件 #include<cstdio> #include<iostream> #include<cstdlib> #include<limits> using namespace std; /*the smallest in the three*/ //无符号长整型 防止数据溢出 double mymin(double a, double b, double c) { double temp = (a < b ? a : b); return (temp < c ? temp : c); } //无符号长整型 防止数据溢出 double FindUgly(int n) { double* ugly = new double[n]; ugly[0] = 1; int index2 = 0; int index3 = 0; int index5 = 0; int index = 1; while (index < n) { double val = mymin(ugly[index2]*2, ugly[index3]*3, ugly[index5]*5); //竞争产生下一个丑数 if (val == ugly[index2]*2) //将产生这个丑数的index*向后挪一位; ++index2; if (val == ugly[index3]*3) //这里不能用elseif,因为可能有两个最小值,这时都要挪动; ++index3; if (val == ugly[index5]*5) ++index5; ugly[index++] = val; } double result = ugly[n-1]; //ugly[0] = 1 是第一个丑数 delete[] ugly; return result; } void test1_29() { for(int i=1;i<30;i++) cout<<"the "<<i<<" th ugly number is "<<FindUgly(i)<<endl; } void test1680_1700() { for(int i=1680;i<1701;i++) cout<<"the "<<i<<" th ugly number is "<<setprecision(10)<<FindUgly(i)<<endl; } void test1800_1991() { for(int i=1800;i<1991;i++) cout<<"the "<<i<<" th ugly number is "<<setprecision(10)<<FindUgly(i)<<endl; } void test1991_2013() { for(int i=1991;i<2014;i++) cout<<"the "<<i<<" th ugly number is "<<setprecision(10)<<FindUgly(i)<<endl; } int main() { cout<<"numeric_limits<int>::max --> " <<(std::numeric_limits<int>::max)()<<endl; cout<< "numeric_limits<unsigned long int>::max --> " <<(std::numeric_limits<unsigned long int>::max)()<<endl; cout<< "numeric_limits<double>::max --> " <<(std::numeric_limits<double>::max)()<<endl; test1_29(); cout<<endl<<"----------------------------"<<endl; test1680_1700(); cout<<endl<<"----------------------------"<<endl; test1800_1991(); cout<<endl<<"----------------------------"<<endl; test1991_2013(); return 0; } /*************************** numeric_limits<int>::max --> 2147483647 numeric_limits<unsigned long int>::max --> 4294967295 numeric_limits<double>::max --> 1.79769e+308 the 1 th ugly number is 1 the 2 th ugly number is 2 the 3 th ugly number is 3 the 4 th ugly number is 4 the 5 th ugly number is 5 the 6 th ugly number is 6 the 7 th ugly number is 8 the 8 th ugly number is 9 the 9 th ugly number is 10 the 10 th ugly number is 12 the 11 th ugly number is 15 the 12 th ugly number is 16 the 13 th ugly number is 18 the 14 th ugly number is 20 the 15 th ugly number is 24 the 16 th ugly number is 25 the 17 th ugly number is 27 the 18 th ugly number is 30 the 19 th ugly number is 32 the 20 th ugly number is 36 the 21 th ugly number is 40 the 22 th ugly number is 45 the 23 th ugly number is 48 the 24 th ugly number is 50 the 25 th ugly number is 54 the 26 th ugly number is 60 the 27 th ugly number is 64 the 28 th ugly number is 72 the 29 th ugly number is 75 ---------------------------- the 1680 th ugly number is 2025000000 the 1681 th ugly number is 2038431744 the 1682 th ugly number is 2040733440 the 1683 th ugly number is 2048000000 the 1684 th ugly number is 2050312500 the 1685 th ugly number is 2066242608 the 1686 th ugly number is 2073600000 the 1687 th ugly number is 2097152000 the 1688 th ugly number is 2099520000 the 1689 th ugly number is 2109375000 the 1690 th ugly number is 2123366400 the 1691 th ugly number is 2125764000 the 1692 th ugly number is 2147483648 the 1693 th ugly number is 2149908480 the 1694 th ugly number is 2152336050 the 1695 th ugly number is 2160000000 the 1696 th ugly number is 2176782336 the 1697 th ugly number is 2187000000 the 1698 th ugly number is 2197265625 the 1699 th ugly number is 2211840000 the 1700 th ugly number is 2214337500 ---------------------------- the 1800 th ugly number is 3456000000 the 1801 th ugly number is 3486784401 the 1802 th ugly number is 3499200000 the 1803 th ugly number is 3515625000 the 1804 th ugly number is 3538944000 the 1805 th ugly number is 3542940000 the 1806 th ugly number is 3583180800 the 1807 th ugly number is 3587226750 the 1808 th ugly number is 3600000000 the 1809 th ugly number is 3623878656 the 1810 th ugly number is 3627970560 the 1811 th ugly number is 3645000000 the 1812 th ugly number is 3662109375 the 1813 th ugly number is 3673320192 the 1814 th ugly number is 3686400000 the 1815 th ugly number is 3690562500 the 1816 th ugly number is 3732480000 the 1817 th ugly number is 3750000000 the 1818 th ugly number is 3774873600 the 1819 th ugly number is 3779136000 the 1820 th ugly number is 3796875000 the 1821 th ugly number is 3822059520 the 1822 th ugly number is 3826375200 the 1823 th ugly number is 3840000000 the 1824 th ugly number is 3869835264 the 1825 th ugly number is 3874204890 the 1826 th ugly number is 3888000000 the 1827 th ugly number is 3906250000 the 1828 th ugly number is 3932160000 the 1829 th ugly number is 3936600000 the 1830 th ugly number is 3955078125 the 1831 th ugly number is 3981312000 the 1832 th ugly number is 3985807500 the 1833 th ugly number is 4000000000 the 1834 th ugly number is 4026531840 the 1835 th ugly number is 4031078400 the 1836 th ugly number is 4050000000 the 1837 th ugly number is 4076863488 the 1838 th ugly number is 4081466880 the 1839 th ugly number is 4096000000 the 1840 th ugly number is 4100625000 the 1841 th ugly number is 4132485216 the 1842 th ugly number is 4147200000 the 1843 th ugly number is 4194304000 the 1844 th ugly number is 4199040000 the 1845 th ugly number is 4218750000 the 1846 th ugly number is 4246732800 the 1847 th ugly number is 4251528000 the 1848 th ugly number is 4271484375 the 1849 th ugly number is 4294967296 the 1850 th ugly number is 4299816960 the 1851 th ugly number is 4304672100 the 1852 th ugly number is 4320000000 the 1853 th ugly number is 4353564672 the 1854 th ugly number is 4374000000 the 1855 th ugly number is 4394531250 the 1856 th ugly number is 4423680000 the 1857 th ugly number is 4428675000 the 1858 th ugly number is 4478976000 the 1859 th ugly number is 4500000000 the 1860 th ugly number is 4529848320 the 1861 th ugly number is 4534963200 the 1862 th ugly number is 4556250000 the 1863 th ugly number is 4586471424 the 1864 th ugly number is 4591650240 the 1865 th ugly number is 4608000000 the 1866 th ugly number is 4613203125 the 1867 th ugly number is 4649045868 the 1868 th ugly number is 4665600000 the 1869 th ugly number is 4687500000 the 1870 th ugly number is 4718592000 the 1871 th ugly number is 4723920000 the 1872 th ugly number is 4746093750 the 1873 th ugly number is 4777574400 the 1874 th ugly number is 4782969000 the 1875 th ugly number is 4800000000 the 1876 th ugly number is 4831838208 the 1877 th ugly number is 4837294080 the 1878 th ugly number is 4860000000 the 1879 th ugly number is 4882812500 the 1880 th ugly number is 4897760256 the 1881 th ugly number is 4915200000 the 1882 th ugly number is 4920750000 the 1883 th ugly number is 4976640000 the 1884 th ugly number is 4982259375 the 1885 th ugly number is 5000000000 the 1886 th ugly number is 5033164800 the 1887 th ugly number is 5038848000 the 1888 th ugly number is 5062500000 the 1889 th ugly number is 5096079360 the 1890 th ugly number is 5101833600 the 1891 th ugly number is 5120000000 the 1892 th ugly number is 5125781250 the 1893 th ugly number is 5159780352 the 1894 th ugly number is 5165606520 the 1895 th ugly number is 5184000000 the 1896 th ugly number is 5242880000 the 1897 th ugly number is 5248800000 the 1898 th ugly number is 5273437500 the 1899 th ugly number is 5308416000 the 1900 th ugly number is 5314410000 the 1901 th ugly number is 5368709120 the 1902 th ugly number is 5374771200 the 1903 th ugly number is 5380840125 the 1904 th ugly number is 5400000000 the 1905 th ugly number is 5435817984 the 1906 th ugly number is 5441955840 the 1907 th ugly number is 5467500000 the 1908 th ugly number is 5509980288 the 1909 th ugly number is 5529600000 the 1910 th ugly number is 5535843750 the 1911 th ugly number is 5598720000 the 1912 th ugly number is 5625000000 the 1913 th ugly number is 5662310400 the 1914 th ugly number is 5668704000 the 1915 th ugly number is 5695312500 the 1916 th ugly number is 5733089280 the 1917 th ugly number is 5739562800 the 1918 th ugly number is 5760000000 the 1919 th ugly number is 5804752896 the 1920 th ugly number is 5811307335 the 1921 th ugly number is 5832000000 the 1922 th ugly number is 5859375000 the 1923 th ugly number is 5898240000 the 1924 th ugly number is 5904900000 the 1925 th ugly number is 5971968000 the 1926 th ugly number is 5978711250 the 1927 th ugly number is 6000000000 the 1928 th ugly number is 6039797760 the 1929 th ugly number is 6046617600 the 1930 th ugly number is 6075000000 the 1931 th ugly number is 6103515625 the 1932 th ugly number is 6115295232 the 1933 th ugly number is 6122200320 the 1934 th ugly number is 6144000000 the 1935 th ugly number is 6150937500 the 1936 th ugly number is 6198727824 the 1937 th ugly number is 6220800000 the 1938 th ugly number is 6250000000 the 1939 th ugly number is 6291456000 the 1940 th ugly number is 6298560000 the 1941 th ugly number is 6328125000 the 1942 th ugly number is 6370099200 the 1943 th ugly number is 6377292000 the 1944 th ugly number is 6400000000 the 1945 th ugly number is 6442450944 the 1946 th ugly number is 6449725440 the 1947 th ugly number is 6457008150 the 1948 th ugly number is 6480000000 the 1949 th ugly number is 6530347008 the 1950 th ugly number is 6553600000 the 1951 th ugly number is 6561000000 the 1952 th ugly number is 6591796875 the 1953 th ugly number is 6635520000 the 1954 th ugly number is 6643012500 the 1955 th ugly number is 6710886400 the 1956 th ugly number is 6718464000 the 1957 th ugly number is 6750000000 the 1958 th ugly number is 6794772480 the 1959 th ugly number is 6802444800 the 1960 th ugly number is 6834375000 the 1961 th ugly number is 6879707136 the 1962 th ugly number is 6887475360 the 1963 th ugly number is 6912000000 the 1964 th ugly number is 6973568802 the 1965 th ugly number is 6998400000 the 1966 th ugly number is 7031250000 the 1967 th ugly number is 7077888000 the 1968 th ugly number is 7085880000 the 1969 th ugly number is 7119140625 the 1970 th ugly number is 7166361600 the 1971 th ugly number is 7174453500 the 1972 th ugly number is 7200000000 the 1973 th ugly number is 7247757312 the 1974 th ugly number is 7255941120 the 1975 th ugly number is 7290000000 the 1976 th ugly number is 7324218750 the 1977 th ugly number is 7346640384 the 1978 th ugly number is 7372800000 the 1979 th ugly number is 7381125000 the 1980 th ugly number is 7464960000 the 1981 th ugly number is 7500000000 the 1982 th ugly number is 7549747200 the 1983 th ugly number is 7558272000 the 1984 th ugly number is 7593750000 the 1985 th ugly number is 7644119040 the 1986 th ugly number is 7652750400 the 1987 th ugly number is 7680000000 the 1988 th ugly number is 7688671875 the 1989 th ugly number is 7739670528 the 1990 th ugly number is 7748409780 ---------------------------- the 1991 th ugly number is 7776000000 the 1992 th ugly number is 7812500000 the 1993 th ugly number is 7864320000 the 1994 th ugly number is 7873200000 the 1995 th ugly number is 7910156250 the 1996 th ugly number is 7962624000 the 1997 th ugly number is 7971615000 the 1998 th ugly number is 8000000000 the 1999 th ugly number is 8053063680 the 2000 th ugly number is 8062156800 the 2001 th ugly number is 8100000000 the 2002 th ugly number is 8153726976 the 2003 th ugly number is 8162933760 the 2004 th ugly number is 8192000000 the 2005 th ugly number is 8201250000 the 2006 th ugly number is 8264970432 the 2007 th ugly number is 8294400000 the 2008 th ugly number is 8303765625 the 2009 th ugly number is 8388608000 the 2010 th ugly number is 8398080000 the 2011 th ugly number is 8437500000 the 2012 th ugly number is 8493465600 the 2013 th ugly number is 8503056000 Process returned 0 (0x0) execution time : 1.427 s Press any key to continue. ****************************/