打印从1到最大的n位数:使用大数

x33g5p2x  于2021-09-24 转载在 其他  
字(0.7k)|赞(0)|评价(0)|浏览(448)

题目:

给定一个正整数 n,打印从 1 到最大的 n 位数。

例如:
n = 2, 则打印从 1 到 99;
n = 3, 则打印从 1 到 999。

思路:

在 n 比较小(比如n=1或n=2或n=3)时,可以使用一个循环简单的解决问题,但当 n 比较大时,打印的数字可能会超出 int 或 long所能表示的范围,这是就应该使用string来表示大数以解决问题。

代码:

  1. #include<iostream>
  2. #include<vector>
  3. #include<cmath>
  4. using namespace std;
  5. char chararr[10] = {'0','1','2','3','4','5','6','7','8','9'};
  6. void dfs(int n, string s, string &res)
  7. {
  8. if(s.size()==n)
  9. {
  10. for(int i=0; i<s.size(); ++i) //处理前缀0
  11. {
  12. if(s[i]!='0')
  13. {
  14. break;
  15. }
  16. else
  17. {
  18. s.erase(0,1);
  19. i--;
  20. }
  21. }
  22. if(s.size()==0)
  23. {
  24. return;
  25. }
  26. res = res + s + " ";
  27. return;
  28. }
  29. for(int i=0; i<10; ++i)
  30. {
  31. s += chararr[i];
  32. dfs(n,s,res);
  33. s.erase(s.size()-1,1);
  34. }
  35. }
  36. int main()
  37. {
  38. int n = 0;
  39. cin >> n;
  40. string s = "";
  41. string res = "";
  42. dfs(n,s,res);
  43. cout << res;
  44. }

相关文章