假设递增数是指从左向右读时,其数字始终不小于前面的数字,例如:234559。
相反,在递减的数字中,从左到右的数字不会增加,例如:97732。
您不必成为新高斯也能理解一百以下的所有数字都属于这两个类别之一。
现在您需要创建一个函数来计算此类数字的数量,最多可达 10 的 n 次方(函数参数)。
全部的 | 以下 |
---|---|
1 | 1 |
10 | 10 |
100 | 100 |
第475章 | 1000 |
第1675章 | 10000 |
4954 | 100000 |
12952 | 1000000 |
#include <string>
#include <cmath>
using namespace std;
unsigned long long total_inc_dec(unsigned int n) {
string curr_num; unsigned long long total = 0; int isInc;
for (int i = 0; i < pow(10, n); i++) {
curr_num = to_string(i);
if (int(curr_num.length()) <= 2) {++total;}
else {
for (int it = 0; it < int(curr_num.length()); it++) {
if (it==0) {
if (curr_num[it] < curr_num[it+1]) {isInc = 1;}
if (curr_num[it] == curr_num[it+1]) {isInc = 0;}
if (curr_num[it] > curr_num[it+1]) {isInc = -1;}
}
else {
if (curr_num[it] < curr_num[it+1]) {
switch(isInc) {
case 1:
if (it == int(curr_num.length()) - 2) {
++total;
}
break;
case 0:
isInc = 1;
if (it == int(curr_num.length()) - 2) {
++total;
}
break;
case -1:
it = int(curr_num.length());
break;
}
}
if (curr_num[it] == curr_num[it+1]) {
if (it == int(curr_num.length()) - 2) {
++total;
}
}
if (curr_num[it] > curr_num[it+1]) {
switch(isInc) {
case -1:
if (it == int(curr_num.length()) - 2) {
++total;
}
break;
case 0:
isInc = -1;
if (it == int(curr_num.length()) - 2) {
++total;
}
break;
case 1:
it = int(curr_num.length());
break;
}
}
}
}
}
}
return total;
}
今天我几乎第一次听到“优化”这个词。我真的不知道该怎么做。