计算1到n的数字中1的出现的次数

主要思路:计算数字每一位出现1的次数,并相加,得到该数字中1出现的次数。

例如:1304中,个位出现1的次数,是131次,即1304/10 + 1 = 131;十位出现1的次数 (1304/100)*10  = 130;百位出现1的次数 (1304/1000 + 1)*100 = 200 ;千位出现1的次数( 1304/10000)*1000+1+1304-int(1304/1000)*1000 = 305 总计766;

总结一下,计算数字n中1的个数,得到以下规律:从个位开始,对每一位数字进行处理,先计算对10取余的余数rem,计算除以10以后的数字tmp,如果余数为0,则该位为1的数字个数为 base*tmp ;余数为1,该位为1的数字个数为n-int(n/base)*base +1 + tmp*base;base在每计算完一位数字后,乘以10,代码如下:

// 计算1的个数.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
using namespace std;

int getNum1(int n)
{
	int num =0;
	
	int tmp,rem,base;
	base =1;tmp = n;
	
	while(tmp)
	{
		rem = tmp%10;
		tmp = tmp/10;
		if(rem == 0)
		{
			num+=base*tmp;
		}
		else if(rem == 1)
		{
			num  = num + (n - int(n/base)*base +1 + tmp*base);
		}
		else
			num += (tmp+1)*base;
		base *= 10;
	}
	
	return num;
}
int _tmain(int argc, _TCHAR* argv[])
{
	auto res = getNum1(1304);
	return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值