打印1到最大的n位数(循环方法)

来源:互联网 发布:java性能分析工具 编辑:程序博客网 时间:2024/06/03 17:20

看到《剑指offer》的第12题是用递归完成的,就想到应该可以用循环完成。

因为n可能很大,用long long都会溢出,所以应该考虑大数问题。对于大数可以用字符串和数字表达。

#include <iostream>using namespace std;void Print1ToMaxOfNDigits(int N){if (N<=0){cout<<"InvalidInput"<<endl;return ;}char* arr=new char[N+2]; //多两个字符,第0位用于当哨兵,第N+1用于存储字符串结束符for (int i=0;i<N+1;i++){arr[i]='0';}arr[N+1]=NULL;int index;int count1=0;//count用于记入现在已经打印出来的数的位数,以免打印出数字前面的0int count2=0;while (arr[0]!='1'){index=N;cout<<&arr[N-count1]<<endl;++arr[N];count2=0;while (arr[index]=='9'+1){arr[index]='0';--index;++arr[index];++count2;}if (count2>count1){count1=count2;}}delete[] arr;}void main(){Print1ToMaxOfNDigits(2);}


0 0
原创粉丝点击