題目:輸入數字n,按順序列印出從1到最大的n位十進位制數分析:由於n未知,可能是非常大的數,常規的資料型別可能裝不下,考慮用字串陣列來儲存數字,但需要考慮一下兩個問題:
字串陣列表示數字的相加演算法(通過模擬十進位制數的加法過程完成或其他方法);
規範得列印出數字。
**:
#include
//////題目:列印1到n位的最大數(考慮大數問題,用字串來表示數字)
///void
print1tonmaxrecursively
(int n)
;//字元竄表示的數字自增1,返回值表示是否溢位
bool
charnumberincrease
(char
*number,
int length)
;//列印字元竄表示的數字
void
printcharnumber
(char
*number,
int length)
;int
main()
void
print1tonmaxrecursively
(int n)
char
*number =
newchar
[n +1]
;for
(int i =
0; i < n; i++
) number[n]
='\0'
;while(!
charnumberincrease
(number, n))}
//字元竄表示的數字自增1
bool
charnumberincrease
(char
*number,
int length)
if(sum >=10)
else
}else
}return isoverflow;
}//列印字元竄表示的數字
void
printcharnumber
(char
*number,
int length)
if(isbeginprint)
}printf
(",");
}
除了通過模擬十進位制數的加法過程來完成以外,還可以通過全排列的思路完成:由於是列印出1到n位的最大數,那麼可以將改問題看成列印n位數的全排列,以下通過遞迴的方式編寫**:
void
print1tonmaxrecursively
(int n)
char
*number =
newchar
[n +1]
;for
(int i =
0; i < n; i++
) number[n]
='\0'
;for
(int i =
0; i <
10; i++
)delete
number;
}//全排列列印的核心函式
void
print1tonmaxrecursivecore
(char
*number,
int length,
int index)
for(
int i =
0; i <
10; i++
)}
///
///題目:兩個大數相加(只考慮正數),輸入:三行,第一行輸入相加兩數的最大位數n,後兩行分別輸入乙個大數
///#include
#include
using
namespace std;
//兩個字串表示的大數相加
char
*addbignumber
(char
*num1,
char
*num2,
int maxlength)
;//列印字元竄表示的數字
void
printcharnumber
(char
*number,
int length)
;int
main()
return0;
}//兩個字串表示的大數相加
char
*addbignumber
(char
*num1,
char
*num2,
int maxlength)
int index1 =
0, index2 =0;
for(
; num1[index1]
!='\0'
; index1++)}
for(
; num2[index2]
!='\0'
; index2++)}
index1--
; index2--
;int max = index1 > index2 ? index1 : index2;
if(maxlength < max)
//預留一位,防止溢位
char
*sum =
newchar
[maxlength +2]
; sum[maxlength +1]
='\n'
;int takeover =0;
for(
int i = maxlength; i >=
0; i--)if
(index2 >=0)
int temp = n1 + n2 + takeover;
if(temp >=10)
else
index1--
; index2--;}
return sum;
}//列印字元竄表示的數字
void
printcharnumber
(char
*number,
int length)
if(isbeginprint)
} cout << endl;
}
面試題17 列印從1到最大到n位數
次題其實考察的是大數問題,但是我目前是用python3進行程式設計,在python中沒有數字的限制,所以會出現直接迴圈的效率比用大數的方法要快,但是這裡還是建議大家先思考大數方法 其實就是輸入n就定義乙個n長度的陣列,每乙個位置代表真實數字對應的位置,然後分辨從0 9迴圈通過字串進行轉換,防止超出傳...
面試題17 列印從1到最大的n位數
輸入數字n,按順序列印出從1最大的n位十進位制數。比如輸入3,則列印出1 2 3一直到最大的3位數即999。2.1 跳進面試官陷阱 分析 這道題目看起來很簡單。我們看到這個問題之後,最容易想到的辦法就是先求出最大的n位數,然後用乙個迴圈從1開始逐個列印。於是寫出以下 void printtomaxo...
面試題17 列印從1到最大的n位數
我自己的實現,常規思路 include include using namespace std bool increment str char num str,int str len else if num str i 9 num str i 0 else return true void my p...