poj 2719 Faulty Odometer

#include <string>
#include
<iostream>
#include
<math.h>
using namespace std;
int main()
{
string str;int i,a,s;
while(cin>>str&&str[0]!='0')
{
s
=0;
for(i=0;i<str.size();i++)
{
a
=str[i]-48;
if(a>4)a--;
s
+=a*pow(9,str.size()-i-1.0);
}
cout
<<str<<": "<<s<<endl;
}
return 0;
}
// 1. 假如是8,则结果是8--=7
// 2. 若是80, 则分为 10 20 30 40 50 60 70 80 除掉 40, 得8--=7
//结果是7*9=63, 9的意思:从1到10有9个满足,其他一样:11-20 21-30 31-50(删去40-49), 51-60 61-70 71-80
// 3.若是800, 则分为 100 200 300 400 500 600 700 800 除掉 400, 得8--=7
//结果是7*9*9=567, 9*9的意思:从1到100有9*9个满足,10 20 30 50 60 70 80 90 100 有9个满足,其中1-10有9个满足,所以是9*9

  

posted on 2011-07-18 11:43  sysu_mjc  阅读(112)  评论(0编辑  收藏  举报

导航