站长网 大数据 如何存一个大数

如何存一个大数

题目: ? ? 输入数字n,按顺序打印出1到最大的n位十进制数。比如输入3,则打印出1,2,3,一直到最大的3位数即999。 ? ?此题看起来简单,当我刚开始看到问题后,首先想到的就是先求出最大值,然后在一个一个打印出就ok啦。但是仔细理解题意,并没有告诉n的取

题目:

? ? 输入数字n,按顺序打印出1到最大的n位十进制数。比如输入3,则打印出1,2,3,一直到最大的3位数即999。

? ?此题看起来简单,当我刚开始看到问题后,首先想到的就是先求出最大值,然后在一个一个打印出就ok啦。但是仔细理解题意,并没有告诉n的取值范围。若n的值非常大,可能就超过了int或者long long的范围。也就是说在做此题时,需要考虑大数。

? 为解决存大数的问题,我们可以利用数组或者字符串存大数。接下来我用字符串来解决大数问题。

? 首先,需要考虑两个问题:

? (1)在字符串上模拟加法

? (2)将字符串中的数字打印出来

程序实现:

模拟加法:

bool?inc(char*?num,int?n)//模拟加法
{
	int?i?=?0;
	int?m?=?0;
	int?take?=?0;//进位
	for(i=n-1;i>=0;i--)
	{
		m?=?num[i]-'0'+?take;
		take?=?0;//进位置0
		if(i?==?n-1)?//从末尾加
		{
			m++;
		}
		if(m?>=?10)//产生进位
		{
			if(i?==?0)//若最高为溢出,终止
				return?0;
			else
			{
				take?=?1;
				num[i]?=?m?-?10?+?'0';//进位后,将本位置0
			}
		}
		else
		{
			num[i]?=?m?+?'0';//不产生溢出时,在本位上加
		}
	}
	return?true;
}

?打印:

//void?print(char*?num,int?n)
//{
// bool?flag?=?true;//标志位
// int?i?=?0;
// for(i=0;i<n;i++)
// {
// if(flag?&&?num[i]?!=?'0')
// {
// flag?=?false;
// }
// if(!flag)//若高位不为0,打印
// {
// printf("%c",num[i]);
// }
// }
// cout<<"?";
/

本文来自网络,不代表站长网立场,转载请注明出处:https://www.zwzz.com.cn/html/shuju/2021/0527/7137.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部