统计1的个数
#include <iostream> #include <string> using namespace std; /************************************************************************/ /* 输入一个数字N,计算从1到N 这N个数字中1出现的次数 例如 N = 2, 则1 2中1出现的次数为1 N = 12, 则 1 2 3 4 5 6 7 8 9 10 11 12 中1出现的次数为5。 求任意给一个N返回1的个数。 1、暴力解法,从1遍历到N,求出每一个数字中1的个数,然后相加之和即为总共1的个数。 2、分析:分析每一位出现1的次数,总和即为总共1出现的次数 1位数时,N>=1, f(N)=1 当N<1 ,f(N)=0; 2位数时,假设ab为一个二位数; 分析个位b:个位1的个数为 a 分析十位a:十位1的个数,若a=1, 十位1的个数为b+1,若a>1,则十位1的个数为10 */ /************************************************************************/ /* 输入一个整数N,求1 2 3 。。。N中含有1的个数 */ int countOnes(int N) { int iCount = 0; int iFactor = 1; int iLowerNum = 0; int iCurrNum = 0; int iHigherNum = 0; while(N/iFactor) { 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; break; } iFactor *= 10; } return iCount; } int main(int argc, char **argv) { int N; cin>>N; cout<<countOnes(N)<<endl; return 0; }
posted on 2014-09-02 19:38 NewPanderKing 阅读(538) 评论(0) 编辑 收藏 举报