日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > > 充電吧
[導讀]題目:輸入數(shù)字n,按順序輸出從1最大的n位10進制數(shù)。比如輸入3,則輸出1、2、3一直到最大的3位數(shù)即999。 分析:這是一道很有意思的題目。看起來很簡單,其實里面卻有不少的玄機。算法一:最直觀的算法

題目:輸入數(shù)字n,按順序輸出從1最大的n位10進制數(shù)。比如輸入3,則輸出1、2、3一直到最大的3位數(shù)即999。 分析:這是一道很有意思的題目??雌饋砗芎唵危鋵嵗锩鎱s有不少的玄機。

算法一:最直觀的算法,求出最大的n位數(shù)是多少,然后一個循環(huán)打印。

void?Print1ToMaxOfNDigits1(int?n)
{
	int?number=1;
	int?i=0;
	while(i++<n)
		number*=10;

	for(i=1;?i<number;?i++)
		cout<<i<<"?";
}

?

算法二:字符串表示大數(shù)

當n很大時,算法一可能會溢出,所以考慮大數(shù)問題一般用數(shù)組或字符串。

用字符串表達數(shù)字的時候,最直觀的方法就是字符串里每個字符都是’0’到’9’之間的某一個字符,表示數(shù)字中的某一位。因為數(shù)字最大是n位的,因此我們需要一個n+1位字符串(最后一位為結束符號’/0’)。當實際數(shù)字不夠n位的時候,在字符串的前半部分補零。這樣,數(shù)字的個位永遠都在字符串的末尾(除去結尾符號)。

首先我們把字符串中每一位數(shù)字都初始化為’0’。然后每一次對字符串表達的數(shù)字加1,再輸出。因此我們只需要做兩件事:一是在字符串表達的數(shù)字上模擬加法。另外我們要把字符串表達的數(shù)字輸出。值得注意的是,當數(shù)字不夠n位的時候,我們在數(shù)字的前面補零。輸出的時候這些補位的0不應該輸出。比如輸入3的時候,那么數(shù)字98以098的形式輸出,就不符合我們的習慣了。

bool?Increment(char*?number)
{
	bool?isOverflow=false;
	int?nTakeOver=0;
	int?nLength=strlen(number);
	
	for(int?i=nLength-1;?i>=0;?i--)
	{
		int?nSum=number[i]-'0'+nTakeOver;
		if(i==nLength-1)
			nSum++;
		
		if(nSum>=10)
		{
			if(i==0)
				isOverflow=true;
			else
			{
				nSum-=10;
				nTakeOver=1;
				number[i]='0'+nSum;
			}
		}
		else
		{
			number[i]='0'+nSum;
			break;
		}

	}
	
	return?isOverflow;

}

void?PrintNumber(char*?number)
{
	bool?isBeginning0=true;
	int?nLength=strlen(number);

	for(int?i=0;?i<nLength;?i++)
	{
		if(isBeginning0?&&?number[i]!='0')
			isBeginning0=false;

		if(!isBeginning0)
		{
			cout<<number[i];
		}
	}
	cout<<"?";
}

void?Print1ToMaxOfNDigits2(int?n)
{
	if(n<=0)
		return;
	char?*number=new?char[n+1];
	memset(number,?'0',?n);
	number[n]='