/*
* 从1到N中1的数目
*/
long long Sum1(unsigned int n)
{
long long iCount = 0;
//当前位数
long long iFactor = 1;
long long iLowerNum = 0;
long long iCurrNum = 0;
long long iHigherNum = 0;
while(n/iFactor != 0)
{
//获取低位数字
iLowerNum = n - (n/iFactor)*iFactor;
//获取当前位的数字
iCurrNum = (n/iFactor)%10;
//获取最高位的数字
iHigherNum = n / (iFactor*10);
switch(iCurrNum)
{
case 0:
iCount += iHigherNum*iFactor;
break;
case 1:
iCount += iHigherNum*iFactor+iLowerNum+1;
break;
default:
iCount += (iHigherNum + 1)*iFactor;
}
iFactor *= 10;
}
return iCount;
}