题目:打印从1~最大的n位数
分析:知道陷阱在哪,即n很大时若用通常的int,long会溢出;想到用字符串解决,这涉及到字符转数字及反过来。
刚开始纠结于字符串怎么加1,想了片刻,觉得应该取出最后一位上的字符,转成数字+1再转成字符,但这就出现个问题:'9'加1后得到'10',这会产生进位。。。
到这思维就乱了。。。1、不断向前进位怎么解决?2、怎么判断到达最大值?
在看过作者的代码后才豁然开朗。。。,解决方案:1、将进位与不进位分开,并且进位时设定nTakeOver用于下一字符的加,该过程用循环完成;2、同样判断最大值时,若第一位的数值=10了,那肯定已经到达最大值了
结合参考代码,自己所写代码如下:
#include "stdafx.h" #include <iostream> using namespace std; void PrintNumber(char* number); //打印数字 bool Increment(char* number,int length); //加1 // ====================方法一==================== void Print1ToMaxOfNDigits_1(int n) { if(n <= 0) return; //错误处理 char *number = new char[n + 1]; memset(number, '0', n); //memset()函数设置number的前n位为字符‘0’:memset(number,'0',n); 该函数位于<memory> number[n] = '