溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

字符串上模擬加法

發(fā)布時間:2020-07-20 17:03:54 來源:網絡 閱讀:740 作者:下一個明天 欄目:編程語言

題目:

    輸入數字n,按順序打印出1到最大的n位十進制數。比如輸入3,則打印出1,2,3,一直到最大的3位數即999。

   此題看起來簡單,當我剛開始看到問題后,首先想到的就是先求出最大值,然后在一個一個打印出就ok啦。但是仔細理解題意,并沒有告訴n的取值范圍。若n的值非常大,可能就超過了int或者long long的范圍。也就是說在做此題時,需要考慮大數。

  為解決存大數的問題,我們可以利用數組或者字符串存大數。接下來我用字符串來解決大數問題。

  首先,需要考慮兩個問題:

  (1)在字符串上模擬加法

  (2)將字符串中的數字打印出來


程序實現(xiàn):


模擬加法:

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;
}

 打?。?/p>

//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<<" ";
//}

void print(char* num,int n)
{
	int i = 0;
	for(i=0;i<n;i++)
	{
		if(num[i] != '0')
			break;
	}
	printf("%s",num+i);
}

 測試:

int main()
{
	int n = 3;//3位數
	char* str = new char[n+1];//字符串的最后一位為‘\0’,多開辟一個空間
	memset(str,'0',n);//初始化
	str[n] = '\0';
	while(inc(str,n))
	{
		print(str,n);
	}
	delete[] str;//釋放空間
	str = NULL;
	return 0;
}


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI