Skip to content

Commit 678c5d3

Browse files
committed
Minor changes for question 44
1 parent 66e2a48 commit 678c5d3

1 file changed

Lines changed: 39 additions & 43 deletions

File tree

44_DigitsInSequence/DigitsInSequence.cpp

Lines changed: 39 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
// 个函数求任意位对应的数字。
1010

1111
#include <iostream>
12+
#include <algorithm>
1213

1314
using namespace std;
1415

@@ -18,74 +19,69 @@ int beginNumber(int digits);
1819

1920
int digitAtIndex(int index)
2021
{
21-
if(index < 0)
22-
return -1;
22+
if(index < 0)
23+
return -1;
2324

24-
int digits = 1;
25-
while(true)
26-
{
27-
int numbers = countOfIntegers(digits);
28-
if(index < numbers * digits)
29-
return digitAtIndex(index, digits);
25+
int digits = 1;
26+
while(true)
27+
{
28+
int numbers = countOfIntegers(digits);
29+
if(index < numbers * digits)
30+
return digitAtIndex(index, digits);
3031

31-
index -= digits * numbers;
32-
digits++;
33-
}
32+
index -= digits * numbers;
33+
digits++;
34+
}
3435

35-
return -1;
36+
return -1;
3637
}
3738

3839
int countOfIntegers(int digits)
3940
{
40-
if(digits == 1)
41-
return 10;
41+
if(digits == 1)
42+
return 10;
4243

43-
int count = 1;
44-
for(int i = 1; i < digits; ++i)
45-
count *= 10;
46-
return 9 * count;
44+
int count = (int) std::pow(10, digits - 1);
45+
return 9 * count;
4746
}
4847

4948
int digitAtIndex(int index, int digits)
5049
{
51-
int number = beginNumber(digits) + index / digits;
52-
int indexFromRight = digits - index % digits;
53-
for(int i = 1; i < indexFromRight; ++i)
54-
number /= 10;
55-
return number % 10;
50+
int number = beginNumber(digits) + index / digits;
51+
int indexFromRight = digits - index % digits;
52+
for(int i = 1; i < indexFromRight; ++i)
53+
number /= 10;
54+
return number % 10;
5655
}
5756

5857
int beginNumber(int digits)
5958
{
60-
if(digits == 1)
61-
return 0;
59+
if(digits == 1)
60+
return 0;
6261

63-
int begin = 1;
64-
for(int i = 1; i < digits; ++i)
65-
begin *= 10;
66-
return begin;
62+
return (int) std::pow(10, digits - 1);
6763
}
6864

6965
// ====================测试代码====================
7066
void test(const char* testName, int inputIndex, int expectedOutput)
7167
{
72-
if(digitAtIndex(inputIndex) == expectedOutput)
73-
cout << testName << " passed." << endl;
74-
else
75-
cout << testName << " FAILED." << endl;
68+
if(digitAtIndex(inputIndex) == expectedOutput)
69+
cout << testName << " passed." << endl;
70+
else
71+
cout << testName << " FAILED." << endl;
7672
}
7773

7874

7975
int main()
8076
{
81-
test("Test1", 0, 0);
82-
test("Test2", 1, 1);
83-
test("Test3", 9, 9);
84-
test("Test4", 10, 1);
85-
test("Test5", 189, 9); // 数字99的最后一位,9
86-
test("Test6", 190, 1); // 数字100的第一位,1
87-
test("Test7", 1000, 3); // 数字370的第一位,3
88-
test("Test8", 1001, 7); // 数字370的第二位,7
89-
test("Test9", 1002, 0); // 数字370的第三位,0
90-
return 0;
77+
test("Test1", 0, 0);
78+
test("Test2", 1, 1);
79+
test("Test3", 9, 9);
80+
test("Test4", 10, 1);
81+
test("Test5", 189, 9); // 数字99的最后一位,9
82+
test("Test6", 190, 1); // 数字100的第一位,1
83+
test("Test7", 1000, 3); // 数字370的第一位,3
84+
test("Test8", 1001, 7); // 数字370的第二位,7
85+
test("Test9", 1002, 0); // 数字370的第三位,0
86+
return 0;
9187
}

0 commit comments

Comments
 (0)