楼主试试下面的代码,GetCount就是f(x)的功能。不用像你那样一个位一个位的枚举了。 不过几十毫秒就把4000000000全跑遍了那也太夸张了吧?我这个几十毫秒只是到了 f(2600001) = 2600001 你自己看看吧。
#include <iostream.h> int GetCount(int n) { int nIncome = n; // 用来临时保存参数传入的n int nPower = 1; // 记录被10除过的次数x,nPower是10的x次方 int nSum = 0; // 最后返回的1的个数 int nByte = 0; // 暂存每次取的某一位上的值 int nCount = 0; // 每一个位能得到1的个数 while (nIncome > 0) { nByte = nIncome % 10; nIncome = nIncome / 10; if (nByte == 0) { nCount = nIncome * nPower; } else if (nByte == 1)// 当某一位是1时,那这个位的1的次数要考虑到尾数的个数 { nCount = nIncome * nPower + (n % nPower + 1); } else { nCount = (nIncome + 1) * nPower; } nSum += nCount; nPower *= 10; } return nSum; } int main(int argc, char* argv[]) { int nCount = 0; for (int i = 0; i < 1111111110; i ++) { nCount = GetCount(i); if (nCount == i) cout << "f(" << i << ") = " << nCount << endl; } return 0; } |