注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Aspirer's blog

停止维护,新博客地址:http://aspirer.wang/

 
 
 

日志

 
 

统计所有0到n之间数字中1出现的次数  

2009-08-22 11:00:46|  分类: 学习心得 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

统计所有0到n之间数字中1出现的次数 - aspirer - Aspirers blog

如n = 1,输出1;n = 13,输出6;n = 111,输出36。

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
using namespace std;

size_t CountOnes(const size_t n)
{
 size_t i = n;
 size_t count = 0;
 char *buffer = NULL;
 char *p = NULL;
 while (i)
 {
  count++;
  i /= 10;
 }
 buffer = (char *)malloc(count + 1);
 assert(buffer);
 
 for (i = 0, count = 0; i <= n; ++i)
 {
  sprintf(buffer, "%u", i);
  p = buffer;
  //cout << buffer << endl;
  while (*p)
  {
   if ('1' == *p)
   {
    count++;
   }
   p++;
  }
 }
 return count;
}


int main(int argc, char *argv[])
{
 size_t n;
 if (argc > 1)
 {
  if (atoi(argv[1]) >= 0)
  {
   n = atoi(argv[1]);
   cout << "one number between 0 and " << n
    << " is : " << CountOnes(n) << endl;
  }
  else
  {
   cerr << "pls input a positive number." << atoi(argv[1]) << endl;
   exit(1);
  }
 }
 else
 {
  cout << "input a positive number." << endl;
  cin >> n;
  cout << "one number between 0 and " << n
    << " is : " << CountOnes(n) << endl;
 }

 return 0;
}

  评论这张
 
阅读(711)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018