本文共 1323 字,大约阅读时间需要 4 分钟。
#include#include using namespace std;/************************************************************************//* 输入一个数字N,计算从1到N 这N个数字中1出现的次数例如N = 2, 则1 2中1出现的次数为1N = 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< <
本文转自NewPanderKing51CTO博客,原文链接:http://www.cnblogs.com/newpanderking/p/3952159.html ,如需转载请自行联系原作者