统计长整型数字逐位数字的常用方法

当我们看到123,233,66666之类的数字时,人眼读入数字的逻辑是从左往右。当需要检查数字有多长时,对于短数字,我们能一眼看出。对于长数字,则需要从从左到右,仔仔细细心中默念,眼中默看。

对于计算机而言,处理数字同理。这里有两种通常方法,一是从高位到低位处理,二是从低位到高位处理。

以123456789为例,如果计算机选第一种,从高到低。得到第一位1则需要123456789/(10的8次方)=1,第二位需要123456789%(10的8次方)=23456789,再23456789/(10的7次方)=2。等等直到长数字为0。得到每位数字都需要计算次方、求余、除法、循环赋值四步。(得到最高位的数字权重需要先遍历一遍数字,方便起见单独写作一个函数)

int GetWeight(long long number)
{
	if (number == 0)	//特殊情况0
	{
		return 1;
	}

	int sum = 0;
	while (number != 0)	//丢最低位来计数
	{
		++sum;
		number /= 10;
	}
	return sum;
}
void function(long long number)	//从高到低
{
	if (number == 0)	//特殊情况0
	{
		cout << 0 << endl;
		return;
	}
	//计算最高位的权重
	int weight = static_cast<int>(pow(10, GetWeight(number)-1));
	while (weight != 0)	//循环得到最高位数字
	{
		cout << number / weight << " ";
		number %= weight;
		weight /= 10;
	}
	return;
}

如果计算机选第二种,从低到高。先得到最低位9:123456789%10=9。再得到8:123456789/10=12345678。12345678%10=8。等等直到长数字为0。可见得到每位数字需要求余、除法、循环赋值三步。

void function(long long number)	//从低到高
{
	if (number == 0)	//特殊情况0
	{
		cout << 0 << endl;
		return;
	}
	
	while (number != 0)	//循环得到最低位数字
	{
		cout << number % 10 << " ";
		number /= 10;
	}
	return;
}

通过对比发现,对计算机而言,从低到高相比从高到低步骤更少更快速,更常用。这就是人与计算机的区别。人要的是直观,从左到右按逻辑来。计算机需要的是快速,为此取最低位,丢最低位循环,这是人所不能接受的。

计算机从低到高的逻辑可以做到更多的事。遍历每位后,除了可以得到长数字的位数,还可以得到每位数字的任意进制的值。上面的例子我们每次%10, /=10,得到的是长数字10进制数的逆序数值。如果把10换成X,就能得到长数字X进制数的逆序数值。而这,正是10进制数字转化为n进制数字的计算机方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值