设为首页 加入收藏

TOP

C++打印位数为n的所有数
2015-11-21 00:59:36 来源: 作者: 【 】 浏览:2
Tags:打印 位数 有数
第一种方法:数组和递归实现
#include 
   
     using namespace std; 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; int *b = new int[n];//在vs2013中不能使用b[n],因为它会认为n是一个未初始化的值。 memset(b,0,n); for (int i = 1; i <= n; i++) { int k = i; General(b,i,k); } } int main() { Grial(3); return 0; }
   

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

#include 
   
     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; }
   
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇LeetCode36:Valid Sudoku 下一篇C语言数组与指针

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: