该题会考查大整数的加法,我之前做大整数运算时,为了图方便,用整数数组来表示,但这会浪费空间,这次我用字符数组来表示,并且存数的时候是按正常顺序来存取
在判断是否到达上限时,通过判断最高位是否需要做进位运算来判断,具体代码如下:
#include#include #include #include #include using namespace std; void print(char *num,int n) { bool shouldStart=false; for(int index=0;index =0;index--) { int sum=num[index]-'0'+carryBit; if(index==n-1) { sum++; } if(sum>=10) { if(index==0) { overFlow=true; }else { sum=sum%10; carryBit=1; num[index]=sum+'0'; } }else { carryBit=0; num[index]=sum+'0'; break; } } return overFlow; } void printAllNum(int n) { if(n<=0) { //throw new exception("the input is error"); } char *num=new char[n+1]; memset(num, '0', n); num[n]='\0'; while(!incNum(num,n)) { print(num,n); } delete []num; } int main() { int n; cin>>n; printAllNum(n); //getchar(); return 0; } #include #include #include #include #include using namespace std; void print(char *num,int n) { bool shouldStart=false; for(int index=0;index =0;index--) { int sum=num[index]-'0'+carryBit; if(index==n-1) { sum++; } if(sum>=10) { if(index==0) { overFlow=true; }else { sum=sum%10; carryBit=1; num[index]=sum+'0'; } }else { carryBit=0; num[index]=sum+'0'; break; } } return overFlow; } void printAllNum(int n) { if(n<=0) { //throw new exception("the input is error"); } char *num=new char[n+1]; memset(num, '0', n); num[n]='\0'; while(!incNum(num,n)) { print(num,n); } delete []num; } int main() { int n; cin>>n; printAllNum(n); //getchar(); return 0; }
第二种解法
n位数相当于对做个全排列,在输出时,把前导的0去掉,就会输出正确结果
#include#include #include //#include //#include using namespace std; void printFinal(char *num,int n) { bool shouldStart=false; for(int index=0;index >n; printAllNum(n); //getchar(); return 0; } #include #include #include //#include //#include using namespace std; void printFinal(char *num,int n) { bool shouldStart=false; for(int index=0;index >n; printAllNum(n); //getchar(); return 0; }