// 2010-01-22 wwwzyb2002 转载请注明作者 #include <iostream> using namespace std; // 判断 n 是否含有7 bool Has7( int n ) { while( n != 0 ) { if( n % 10 == 7 ) return true; n /= 10; } return false; } int CalcNumThatInclude7( int n ) { // 计算从1-n中不含7的数的个数 int iTmp = n; // 保存n的值,返回值的时候用 int iCount = 0; int iCurrent = 0; int iPow = 1; int iHigh = n; while( iTmp != 0 ) { // 获得最低位 iCurrent = iTmp % 10; // 当前位 iHigh = iHigh / 10; // 高位 if( Has7( iHigh ) ) // 高位有7当做9处理 iCount += ( 9 - 1 ) * iPow; else if( iCurrent <= 6 ) // 小于7 iCount += iCurrent * iPow; else iCount += (iCurrent - 1) * iPow; iPow *= 9; iTmp /= 10; } return n - iCount; } int main(int argc, char* argv[]) { int n = 37; CalcNumThatInclude7( n); system( "pause" ); return 0; } 思路很简单:先求出1-2008080808中不含7的数的个数,再用2008080808减去该值,即为所求。