题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。
private int iFactor = 1, iLower = 0, iCur = 0, iHigh = 0, iCount = 0;
public int sum1(int N) {
while (N / iFactor != 0) {
iLower = N - (N / iFactor) * iFactor;
iCur = (N / iFactor) % 10;
iHigh = N / (10 * iFactor);
switch (iCur) {
case 0:
iCount += iFactor * iHigh;
break;
case 1:
iCount += iFactor * iHigh + iLower + 1;
break;
default:
iCount += (iHigh + 1) * iFactor;
break;
}
iFactor *= 10;
}
return iCount;
}
上面的程序iCur表示当前位的数字,iLower表示iCur的低一位的数字,iHigh表示当前位的高一位的数字,我们计算1在某一位出现的次数,此时这个不仅与当前位有关,而且与当前位的前一位有关。