您的位置:首页 > 其它

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

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

思路:当N较大时候,就已经溢出了,所以这是个大数问题,可以参见 http://blog.csdn.net/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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: