锘??xml version="1.0" encoding="utf-8" standalone="yes"?>#include <cstdio>
2#include <cmath>
3const int MAX = 20;
4
5__int64 arr_bit[MAX]; //璁板綍i涓綅鏈夊嚑涓洖鏂囨暟
6char strNum[50]; //淇濆瓨緇撴灉
7
8void Cal()
9{
10 int i, j;
11 __int64 t;
12
13 arr_bit[1] = 9;
14
15 for ( i = 2; i <= MAX; ++i )
16
{
17 arr_bit[i] = arr_bit[i - 1];
18 t = 9;
19 for ( j = 0; j < (i >> 1) - 1; ++j )
20 t *= 10;
21 if ( i % 2 != 0 )
{
22 t *= 10;
23 }
24 arr_bit[i] += t;
25 }
26}
27
28void GetNum(const __int64& n)
29{
30 //瀵瑰皯浜?00鐨勬暟鐩存帴杈撳嚭
31 if ( n <= 9 )
32
{
33 printf("%I64d\n", n);
34 }
35 else if ( n <= 18 )
36
{
37 printf("%I64d%I64d\n", (n - 9), (n - 9));
38 }
39 else
{
40 int i, pos, wh, t, k;
41 __int64 del;
42
43 //鎵懼嚭褰撳墠鏁版湁澶氬皯涓綅
44 for ( i = 3; i <= MAX; ++i )
45
{
46 if ( arr_bit[i] >= n )
47
{
48 pos = i;
49 break;
50 }
51 }
52
53 //pos涓綅鐨勭鍑犱釜
54 del = n - arr_bit[pos - 1] - 1;
55
56 wh = pos >> 1;
57
58 if ( pos % 2 == 0 )
{
59 wh--;
60 }
61
62 //紜畾姣忎釜浣?/span>
63 t = (int)pow(10, wh);
64 strNum[0] = strNum[pos - 1] = (int)(del / t) + 1 + '0';
65 del = del % t;
66
67 for ( i = wh - 1, k = 1; i >= 0; --i, ++k )
68
{
69 t = (int)pow(10, i);
70 strNum[k] = strNum[pos - k - 1] = (int)(del / t) + '0';
71 del = del % t;
72 }
73
74 strNum[pos] = '\0';
75
76 printf("%s\n", strNum);
77
78 }
79
80}
81
82int main()
83{
84 __int64 n;
85
86 Cal();
87
88 while ( true )
89
{
90 scanf("%I64d", &n);
91
92 if ( n == 0 )
93 break;
94
95 GetNum(n);
96 }
97 return 0;
98}
99
100
101
102
]]>
鏃犵┓閫艱繎姝g‘絳旀錛屾渶鍚庡氨鏄紜瓟妗?img height=20 src="http://www.shnenglu.com/Emoticons/QQ/noidea.gif" width=20 border=0>