C++打印位数为n的所有数

第一种方法:数组和递归实现;void General(int b[], int n,int k){if (n <= 0)//k是打印位数,n是递归剩余位数。{if (k != 1){while (b[k – 1] == 0)//去掉最高位的0{k–;}if (k == 1)return;}for (int j = k-1; j >=0; j–){cout << b[j] << ” “;if (j == 0)cout << endl;}return;}for (int i =0; i < 10; i++)//我感觉我还不是很得心应手。{b[n-1] = i;General(b, n – 1,k);//一位一位的递归赋值,赋值范围是0-9}}void Grial(int n){if (n <= 0)return;(b,0,n);for (int i = 1; i <= n; i++){int k = i;General(b,i,k);}}int main(){Grial(3);return 0;}

第二种方法,,字符串实现:

#include <iostream>using namespace std;void ADD(char *str,int n,int &x){int flags = 1;char *p = str + n – 1;while (flags != 0){flags = 0;if ((*(p) + flags – ‘0’) == 9){flags = 1;*(p) = ‘0’;}else{*(p) = *(p)-‘0’ + ‘1’;}p–;if (*str == ‘9’ && flags == 1 && *p==’9′)//如果最高位已经为9了,且次高位也为9,flags=1{//那么判断已经结束,将标志位设置为1,返回终止。x = 1;return;}}}void Printf(char *str)//打印,除去首部的0{char *p = str;while (*p == ‘0’){p++;}cout << p << endl;}void Grial(int n){if (n <= 0)return;char *str = new char[n];memset(str,’0′,n);*(str + n) = ‘\0’;int flags = 0;//作为结束标志。while (1){Printf(str);ADD(str,n,flags);//加1.if (flags == 1)break;}}int main(){Grial(2);return 0;}

继续期待我的下一个旅行,拿起背包,

C++打印位数为n的所有数

相关文章:

你感兴趣的文章:

标签云: