首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

编程之好系列(一): 1的数目

2012-11-06 
编程之美系列(一): 1的数目问题描述给定一个十进制正整数N,求出从1开始,到N的所有整数中出现的所有“1”的个

编程之美系列(一): 1的数目
问题描述

给定一个十进制正整数N,求出从1开始,到N的所有整数中出现的所有“1”的个数。

思路一

这个问题初一看感觉就是不是很难,因为马上就能想到一个最简单的方法来计算了,那就是从1开始遍历到N,将其

中每一个数中含有的“1”的个数加起来,这样便得到了从1到N所有“1”的个数的和。下面是实现代码

#include<iostream>using namespace std;long long count1 (int n){long long iCount = 0;long long iFactor = 1;long long iLowerNum = 0;long long iHigherNum = 0;long long iCurrNum = 0;while (n / iFactor){iLowerNum = n % 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(){long long n;int sum;while (cin >> n){sum = count1(n);cout << sum << endl;}}

这个程序计算100 000 000在我机子上运行不到1毫秒就搞定啦,速度不知道提高了多少倍!



热点排行