题目大意:一个给定数,求小于这个数所有不包含4的数的个数。
解题思路:
方法1:拿到题以为直接遍历判断是否包含4即可。但是C++ 中string与int转化不像Java那么方便。放弃之。
方法2:事先算出各位(如10,100,1000,10000)所包含的4的数量打表,然后用位数相乘。
但每次计算会忽略本位为4时相应的数量。放弃之。
方法3:看了答案之后才恍然大悟是变相的9进制转化为10进制,每位大于4时先减一。
得到最后的9进制数转化为10进制数输出即可。
// 1240.Faulty Odometer
// 九进制转化为十进制
#include <iostream>
#include <string>
using namespace std;
int main () {
//freopen("D:\\input.txt","r",stdin);
string num = "";
while( cin >> num && num != "0" ){
int pre = 0,x = 1;
for( int i = num.length() - 1; i >= 0; --i ){
int tmp = num[i] - '0';
if( tmp > 4 ) tmp--;
pre += tmp * x;
x *= 9;
}
cout << num << ": " << pre << endl;
}
return 0;
}