大数的加法,乘法,全排列实现
2015-04-15 11:00
211 查看
打印1到最大的n位数:
这里一个很重要的概念就是n位数,不知道n为多大,那么需要用一个字符来表示一个大数
这里用string来表示大数,为了打印的时候方便,这里需要模拟一个字符的加法操作
另外,之前实现过大数的乘法,异曲同工:
/article/1532467.html
因为题目是只需要打印出这些数据,因此也可以直接利用数字的全排列的特点:
全排列,基本就是一个循环加上遍历的过程
这里一个很重要的概念就是n位数,不知道n为多大,那么需要用一个字符来表示一个大数
这里用string来表示大数,为了打印的时候方便,这里需要模拟一个字符的加法操作
另外,之前实现过大数的乘法,异曲同工:
/article/1532467.html
#include<iostream> #include<string> using namespace std; int Incrument(string& num,int n) { int length = num.length(); bool overflag = false; int nextflag = 0;//<标示进位符号 for (int i = length-1; i>=0;i--) { int nSum = num[i]-'0'+nextflag; if (i == length-1) { nSum++;//<最后一位加上1 } if (nSum < 10) { num[i] = nSum+'0'; break; } if (nSum >= 10) { if (i == 0 && length == n)//<标示最高位进位了,标识需要退出程序 { overflag = true; break; } num[i] = nSum-10+'0'; nextflag = 1; if (i == 0)//<如果最低位进位,那么string需要扩展,如果这里不用string利用char那么在输出的时候有一定操作 { num = '1'+num; } } } return overflag; } void PrintNum(string num) { for (int i = 0; i < num.length(); i++) { cout << num[i]; } cout << endl; } void PrintMax(int n) { string num = "0";//<输出的数据 if(n == 0) { return; } while (!Incrument(num,n)) { PrintNum(num); } } int main() { PrintMax(4); return 0; }
因为题目是只需要打印出这些数据,因此也可以直接利用数字的全排列的特点:
全排列,基本就是一个循环加上遍历的过程
#include<iostream> #include<string> using namespace std; void PrintNum(char* num,int n) { int flag = true; for (int i = 0; i <n; i++) { if(flag) { if (num[i] == '0') { continue; } else { cout<<num[i]; flag = false; } } else { cout<<num[i]; } } if (!flag) { cout<<endl; } } void PrintRecursively(char* num, int n, int index) { if(index == 0) { PrintNum(num,n); return; } for (int i = 0; i < 10; i++) { num[index-1] = i+'0'; PrintRecursively(num,n,index-1); } } void PrintMax(int n) { char *num = new char ; if(n == 0) { return; } for (int i = 0; i < 10; i++) { num[n-1] = i+'0'; PrintRecursively(num,n,n-1); } delete []num; } int main() { PrintMax(2); return 0; }
相关文章推荐
- 基础算法,大数加法和乘法的实现
- 大数运算,队列实现大数 加法、乘法、除法、模除
- 单链表实现大数加法、大数减法、大数乘法、大数指数运算
- 使用C++类实现大数加法,大数减法,大数乘法
- vector、string实现大数加法乘法
- 大数运算之加法乘法---JAVA实现
- 大数乘法与大数加法 java实现
- Java字符串的大数加法和乘法实现
- 大数加法、减法、乘法、除法实现
- 大数乘法、大数加法实现
- C语言数组加链表实现大数的加法乘法
- java实现大数加法、乘法(BigDecimal)
- 大数加法和大数乘法的实现
- 剑指offer编程题Java实现——面试题12相关题大数的加法、减法、乘法问题的实现
- 移位,逻辑运算实现加法,乘法和除法
- 用数组实现大数加法
- 我用c++写的一个多项式的处理器的核心部分和输出部分。实现多项式的加法,减法,乘法,除法,及其求余。
- 大数加法 减法 乘法 除法 高精度四则运算
- Python位运算实现加法和乘法
- JAVA实现大数加法