整体结构
void PRint1ToMaxOfDigits(int n){ if (n <=0)//对于n=0也需要限制,因为无法跳出循环,造成死循环 { return; } char *number = new char[n + 1]; memset(number, '0', n + 1); number[n] = '/0'; while (!Increment(number))//当空间第一位进位时,循环结束 { PrintNumber(number); } delete[]number; number = NULL;}字符串模拟加法:
bool Increment(char *number){ bool isOverflow = false; int nTakeOver = 0; int nLength = strlen(number); //从最低位开始加 for (int i = nLength - 1; i >= 0;--i) { int nSum = number[i] - '0' + nTakeOver; if (i == nLength - 1) { ++nSum; } if (nSum >= 10) { if (i == 0) { isOverflow = true; } else { nSum -= 10; nTakeOver = 1; number[i] = '0' + nSum; } } else { number[i] = '0' + nSum; break; } } return isOverflow;}出于真实角度,若字符串前面几个字符为‘0’,我们不需要将他们打印
void PrintNumber(char *number){ bool isBeginning0 = true; int nLength = strlen(number); for (int i = 0; i < nLength - 1; ++i) { if (isBeginning0&&number[i] != 0) { isBeginning0 = false; } if (!isBeginning0) { printf("%c", number[i]); } } printf("/t");}测试:
int main(){ Print1ToMaxOfDigits(2); return 0;}新闻热点
疑难解答