打印1到最大的n位数
2015-10-18 19:30
357 查看
题目:输入数字n,按顺序打印出从1到最大的n位十进制数。如输入3,则打印1 、2 、3一直到最大的3位数,即999。
分析:本题要考虑如何表达一个大数(即超出计算机所能表示的范围)的问题。常用的方法是用字符串来表示一个较大的数。本题可以先分配一个n+1大小的字符串数组,然后在该字符串数组上,模拟+1操作,并打印出结果。
扩展:用字符串模拟大数相加(正数)。
分析:本题要考虑如何表达一个大数(即超出计算机所能表示的范围)的问题。常用的方法是用字符串来表示一个较大的数。本题可以先分配一个n+1大小的字符串数组,然后在该字符串数组上,模拟+1操作,并打印出结果。
void Print1ToMaxofDigits(int iN) { if (iN <= 0){ return ; } char *number = new char[iN+1]; memset(number,'0', iN);//将字符串的初始值设置为'0' number[iN]='\0'; while(!Increment(number)){//递增 PrintNumber(number);//打印 } delete [] number; }
void PrintNumber(char* number) { int i=0; while(number[i] == '0'){ i++; } printf("%s\n",&number[i]); } bool Increment(char* number) { bool iOverflow = false; int iTakeOver = 0; int iLen = strlen(number); for (int i=iLen-1; i>=0; i--) { int iSum = number[i]-'0'+iTakeOver; if (i == iLen -1){ iSum++; } if (iSum >= 10){ if (i == 0 ){ iOverflow = true; }else{ iSum -= 10; iTakeOver = 1; number[i] = iSum + '0'; } }else{ number[i] = iSum + '0'; break; } } return iOverflow; }
扩展:用字符串模拟大数相加(正数)。
bool BigDataSum(char* num1, char* num2) { int iNum1Len = strlen(num1); int iNum2Len = strlen(num2); int iLen = 0; iNum1Len>iNum2Len?(iLen=iNum1Len):(iLen=iNum2Len); char* strNum1 = new char[iLen+1]; char* strNum2 = new char[iLen+1]; memset(strNum1,'0',iLen); memset(strNum2,'0',iLen); strNum1[iLen]='\0'; strNum2[iLen]='\0'; strcpy(strNum1+iLen-iNum1Len,num1); strcpy(strNum2+iLen-iNum2Len,num2); puts(strNum1); int iTakeOver = 0; bool bOverflow = true; for (int i=iLen-1; i>=0; i--) { int iValue1 = strNum1[i]-'0'; int iValue2 = strNum2[i]-'0'; int iSum = iValue1+iValue2+iTakeOver; if (iSum >= 10){ if (i == 0){ bOverflow = false; }else{ iSum -= 10; iTakeOver = 1; strNum1[i] = iSum+'0'; } }else{ strNum1[i] = iSum+'0'; } } puts(strNum2); puts(strNum1); delete[] strNum1; delete[] strNum2; return bOverflow; }
相关文章推荐
- 实现函数 doubule Power(double base, int exponent),求base的exponent次方,不得使用库函数,同时不需要考虑大数问题
- Thread安全与不安全
- Linux汇编语言及嵌入式汇编
- hive中Specified key was too long; max key length is 767 bytes问题解决
- HDU——2018 母牛的故事
- C和指针 (pointers on C)——第十四章:预处理器
- UVa1382--Distant Galaxy(离散化+扫描线)
- HP ALM 测试管理中心用户创建:
- 主线程与子线程之间相互通信
- 收集 天创恒达高清采集卡TC-5A0N7
- uft练习
- ieee浮点
- web工程中各类地址的写法
- linux目录解释
- poj 3320 Jessica's Reading Problem 【尺取法】
- leetcode #66 Plus One
- 基于Theano的深度学习(Deep Learning)框架Keras学习随笔-10-回调
- 软件设计之用户界面设计
- 传教士和野人问题
- 传教士和野人问题