【 OJ 】 HDOJ1018 公式求数有多少位问题 [ 17 ]

自己开始的思路感觉并不好.....参考网上人的思路.....堪比变态

此题已经被 AC

/*
首先第一思路就是大数阶乘,求出具体数值用数组存储,然后sizeof(a)/sizeof(a[0]) 拿到个数,操作内存占用大,时间慢,计算阶乘的具体数值会做很多无用功
所以根据网上的思路可以推导出公式:
   任何一个两位数 例如 99 肯定大于10 小于100
   =>        10^x-1<= 任意数a(具有x位)<10^x
   =>       x-1<=  log10(a)<x
   =>      x=log10(a)+1
   =>   x= log10(a!) => x=log10(1)+log10(2)+.....log10(a)
   题目转化为了队log 求和
*/
# include<iostream>
using namespace std;
int main(void) {
	int n;
	int N;
	int index = 0;
	double sum = 0;
	cin >> n;
	while (n--) {
		cin >> N;
		for (index = 1; index <= N; ++index) {
			sum += log10(index);
		}
		cout <<(int) (sum +1)<< endl;
		sum = 0;
	}
	system("pause");
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值