首页 > 代码库 > 统计1的个数
统计1的个数
#include <iostream>#include <string>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<<countOnes(N)<<endl; return 0;}
统计1的个数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。