17は、nビットの最大数1〜オファー印刷面の質問に勝ちます

質問: 1からnビットの小数順に番号nが最大プリントを入力します。

入力: N-を

出力:デジタルを印刷

アイデア:

エラーが発生しやすいアイデア:最大nビットの10進数、そして用ループプリントを見つけます。

原因:最大nビットの10進数がint型(またはLONG​​LONGタイプ)を超えてもよいです。

多数のアレイ(または文字列)を使用して発現させました。

コード:

#include <iostream>
#include <string.h>
using namespace std;
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(number[i]!='0'&&isBeginning0)
			isBeginning0 =false;
		if(!isBeginning0)
		{
			printf("%c",number[i]);
		}
	}
	printf("\t");
}
void Print1ToMaxOfNDigits(int n)
{
	if(n<=0)
		return;
	char *number=new char[n+1];
	memset(number,'0',n);
	number[n]='\0';
	while(!Increment(number))
	{
		PrintNumber(number);
	}
	delete[] number;
}
int main()
{
	int n=3;
	Print1ToMaxOfNDigits(n);
	return 0;
}

複雑性分析:

時間の複雑さO(10 ^ N * N)、スペースの複雑さO(N)

公開された58元の記事 ウォン称賛10 ビュー7523

おすすめ

転載: blog.csdn.net/qq_22148493/article/details/104463929