微软100题(65)输出1到最大的N位数(运算)

本文介绍了一种算法,该算法能够输出从1到最大的N位10进制数,解决了大数加法的问题,并提供了详细的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

输出1到最大的N位数(运算)
题目:输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,
则输出1、2、3一直到最大的3位数即999。


思路:当N较大时候,就已经溢出了,所以这是个大数问题,可以参见
http://blog.youkuaiyun.com/liuqing0517/article/details/46008697

每次加一输出
加法程序:
string AddString(string str1 ,string str2)
{
	if(str1.length()<str2.length()) 
		swap(str1,str2);
	int len1 = str1.length();
	int len2 = str2.length();
	reverse(str1.begin(),str1.end());
	reverse(str2.begin(),str2.end());

    vector<int> vec(len1+1,0);
	int i,k,p;
	for (i=0;i<len1;++i)
	{
		if(i<len2) vec[i] = (str1[i]-'0')+(str2[i]-'0');
		else vec[i] = str1[i]-'0';
	}
	for (i=0;i<len1;++i)
	{
		vec[i+1] +=vec[i]/10;
		vec[i] = vec[i]%10;
	}
	for (p=vec.size()-1;p!=-1;p--)
		if(vec[p]!=0) break;
	if(p==-1) p=0;
	string res(p+1,'0');
	for (k = p;k>=0;--k)
		res[p-k] = char(vec[k]+'0');

	return res;
	
}
打印1——最大N位数
void PrintMaxN(int N)
{
	string maxnum(N,'9');
	string temp("1");
	while (temp!=maxnum)
	{
		cout<<temp<<endl;
		temp = AddString(temp,"1");
	}
	cout<<maxnum<<endl;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值