烽火戏诸侯299 ,779是哪个方位?

剑指Offer(81)
输入数字n,按顺序打印出从1到最大的n为十进制数。比如输入3,打印1、2、3一直到最大的3位数即999.
分析:只需计算出最大的数字,然后循环依次打印即可!
源代码如下:
#include&iostream&
using std::
using std::
void PrintOneToMax1(int n)
if (n &= 0)
int max = 1;
while (n--)
max *= 10;
for (int i = 1; i & i++)
cout && i && &
int main()
PrintOneToMax1(2);
system(&pause&);
输出结果:
请按任意键继续. . .
缺点:没有考虑到大数问题!
分析:考虑到大数问题,我们无论使用int型变量还是用long long类型变量,都可能存在溢出的问题,其中的一种解决方法就是用字符数组模拟数字存储方式,按照需求分配内存空间既不会浪费空间,也不会存在溢出的现象!但问题是怎样模拟数字的加法!!!
源代码如下:
#include&cstdlib&
#include&cstring&
#include&cstdio&
PrintOneToMax2(int n);//总体规划函数
bool Increment(char *number);//字符串表达的数字模拟加法
void printNum(char *number);//按照习惯方式打印字符串数字
void PrintOneToMax2(int n)
if (n &= 0)
puts(&Can't print!!!&);
char *number = (char *)malloc(sizeof(char)*(n + 1));
memset(number, '0', n);
number[n] = '\0';
while (!Increment(number))
printNum(number);
free(number);
bool Increment(char *number)
int len = strlen(number);
bool isOverflow =
int TakeOver = 0;
for (int i = len - 1; i &= 0; i--)
int nSum = number[i] - '0' + TakeO
if (i == strlen(number) - 1)
if (nSum &= 10)
if (i == 0)
isOverflow =
nSum -= 10;
TakeOver = 1;
number[i] = '0' + nS
number[i] = '0' + nS
return isO
void printNum(char *number)
int len = strlen(number);
bool isPrint =
for (int i = 0; i & i++)
if (isPrint && number[i] != '0')
if (!isPrint)
printf(&%c&, number[i]);
int main()
PrintOneToMax2(0);
putchar('\n');
PrintOneToMax2(-2);
putchar('\n');
PrintOneToMax2(2);
putchar('\n');
system(&pause&);
运行结果:
Can't print!!!
Can't print!!!
请按任意键继续. . .
注意:1.在打印时需要多加注意,用人们习惯的方式来打印数字;2.被忘了delete掉开辟的空间,以防止内存泄漏
将问题转化为数字的全排列,n位所有十进制数其实就是n从0到9的全排列,全排列问题用递归算法较容易实现!
源代码如下:
#include&cstdlib&
#include&cstdio&
#include&cstring&
void printNum3(char *number)
int len = strlen(number);
bool isPrint =
for (int i = 0; i & i++)
if (isPrint && number[i] != '0')
if (!isPrint)
printf(&%c&, number[i]);
void PrintOneToMaxRecu(char *number, int length, int index)
if (index == length)
printNum3(number);
for (int i = 0; i & 10; i++)
number[index] = i + '0';
PrintOneToMaxRecu(number, length, index+1);
void PrintOneToMax3(int n)
if (n &= 0)
puts(&Can't print&);
char *number = new char[n + 1];
number[n] = '\0';
PrintOneToMaxRecu(number, n, 0);
int main()
PrintOneToMax3(0);
putchar('\n');
PrintOneToMax3(-2);
putchar('\n');
PrintOneToMax3(2);
putchar('\n');
system(&pause&);
运行结果和方法二一致!
官方源代码:
#include&cstdio&
#include&cstdlib&
#include &memory&
void PrintNumber(char* number);
bool Increment(char* number);
void Print1ToMaxOfNDigitsRecursively(char* number, int length, int index);
// ====================方法一====================
void Print1ToMaxOfNDigits_1(int n)
if (n &= 0)
char *number = new char[n + 1];
memset(number, '0', n);
number[n] = '\0';
while (!Increment(number))
PrintNumber(number);
// 字符串number表示一个数字,在 number上增加1
// 如果做加法溢出,则返回true;否则为false
bool Increment(char* number)
bool isOverflow =
int nTakeOver = 0;
int nLength = strlen(number);
for (int i = nLength - 1; i &= 0; i--)
int nSum = number[i] - '0' + nTakeO
if (i == nLength - 1)
if (nSum &= 10)
if (i == 0)
isOverflow =
nSum -= 10;
nTakeOver = 1;
number[i] = '0' + nS
number[i] = '0' + nS
return isO
// ====================方法二====================
void Print1ToMaxOfNDigits_2(int n)
if (n &= 0)
char* number = new char[n + 1];
number[n] = '\0';
for (int i = 0; i & 10; ++i)
number[0] = i + '0';
Print1ToMaxOfNDigitsRecursively(number, n, 0);
void Print1ToMaxOfNDigitsRecursively(char* number, int length, int index)
if (index == length - 1)
PrintNumber(number);
for (int i = 0; i & 10; ++i)
number[index + 1] = i + '0';
Print1ToMaxOfNDigitsRecursively(number, length, index + 1);
// ====================公共函数====================
// 字符串number表示一个数字,数字有若干个0开头
// 打印出这个数字,并忽略开头的0
void PrintNumber(char* number)
bool isBeginning0 =
int nLength = strlen(number);
for (int i = 0; i & nL ++i)
if (isBeginning0 && number[i] != '0')
isBeginning0 =
if (!isBeginning0)
printf(&%c&, number[i]);
printf(&\t&);
// ====================测试代码====================
void Test(int n)
printf(&Test for %d begins:\n&, n);
Print1ToMaxOfNDigits_1(n);
Print1ToMaxOfNDigits_2(n);
printf(&Test for %d ends.\n&, n);
int main()
system(&pause&);
运行结果:
Test for 1 begins:
Test for 2 begins:
Test for 3 begins:
Test for 0 begins:
Test for 0 ends.
Test for -1 begins:
Test for -1 ends.
请按任意键继续. . .
如果面试时关于n位的整数并且没有设定n的取值范围,或者输入任意大小的整数,那么这个题目很可能是需要考虑大数问题的。字符串是一个简单、有效的表示大数的方法!
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:48996次
积分:2847
积分:2847
排名:第8917名
原创:249篇
转载:20篇
评论:10条
文章:25篇
阅读:22868
文章:30篇
阅读:2851
(55)(38)(29)(58)(58)(31)【烽火体育】NIKE BENASSI DUO DUTRA 忍者拖鞋
1回复 346浏览
品名&&NIKE BENASSI DUO DUTRA&品牌NIKE货号 010&产地中国状态全新原盒做工&正常尺码建议:正常尺码,按照平时穿着尺码选择即可(脚肥的话建议选择大半码)(温馨提示:运动鞋都属于工业制成品,并不能做到完全适合每个人的脚型,新鞋上脚可能会出现磨脚或不合脚等情况,都属于正常现象,以上尺码建议只供参考哦。& & &&轻便好穿又不失潮流的性价比鞋款,喜欢的朋友不要错过~&售后说明:收货7天内商品未经使用不影响本店二次销售的情况下可退换(瑕疵商品除外),详情请咨询客服.洗涤建议:请使用湿布沾水擦拭脏污,切勿用洗衣机或硬毛刷直接洗涤。清洗后请置于干燥、通风处晾干,避免阳光直接暴晒,以免造成鞋面硬化、变形、破裂、鞋底脱胶等情况发生.本店另售“”(点击获取)需要的顾客请咨询客服购买。洗后保存:做好支撑准备,选用白色的纸张,但要有吸水性,而且质地不宜过软,不然起不到支撑的效果,揉成团后塞入鞋内再放入小包的干燥剂放在通风处即可.宝贝链接:烽火主页链接:&&
淘宝店铺:http://beac*河蟹*.
微信搜索fhty365即可获取最新球鞋信息
腾讯微博:/fhty888
旺旺:liu82828
烽火体育新浪微博:/u/
全场商品均为正品,接受国内各大知名球鞋论坛检验 假一罚三
淘宝店铺:http://beac*河蟹*.
微信搜索fhty365即可获取最新球鞋信息
腾讯微博:/fhty888
旺旺:liu82828
烽火体育新浪微博:/u/
您需要登录后才可以回复,请
& 允许多选烽火戏诸侯的典故出自哪个国王统治时期_百度知道关注我们查看更多视频& &&liv554小liv339影liv779院liv299(vipbaaa) 
 文章为作者独立观点,不代表微头条立场
的最新文章
vipbaaa热门文章最新文章vipbaaa}

我要回帖

更多关于 烽火戏诸侯 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信