c++ 9位5的疑惑

智者知已应修善业 2014-04-06 08:49:53
刚接触C++也没从头学,下面代码当输入9位5时发生错误,什么原因?达人请详说解惑。

int 输入数, 位 = 0;
cout << "输入任意整数不超过指定 Int 范围位数:" << endl;
cin >> 输入数; int *动态 = new int[输入数];
do
{
动态[位] = 输入数 % 10;
输入数 /= 10;
位++;
} while (输入数 > 0);
printf("输入数为: %d位\n", 位);
for (int 序 = 位 - 1; 序 >= 0; 序--)
printf("%d ", 动态[序]);
printf("\n");

...全文
468 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这个问题真有那么难回答和分析解释? 下本C++快速浏览一下,不过就是添加头文件:#include <list>,然后了解其如何操作,就这么简单而已.

	int 输入数, 位 = 0;
	cout << "输入任意整数不超过指定 Int 范围位数:" << endl;
	cin >> 输入数;
	list<int> 动态;
	do/*输出各位数*/
	{
		动态.push_back( 输入数 % 10);
		输入数 /= 10;
		位++;
	} while (输入数 > 0);
	printf("输入数为: %d位\n", 位);
	list<int>::iterator 元素头 = 动态.begin();
	while (元素头 != 动态.end())
		cout << *元素头++ << " ";
	cout << endl;
	list<int>::iterator 元素尾 = 动态.end();
	while (元素尾 != 动态.begin())
		cout << *--元素尾 << " ";
	printf("\n");
让我怎么说?说有高手可是...说没高手又不对.
  • 打赏
  • 举报
回复
还是看看昨晚刚设计出来的:

            List<int> 贝 = new List<int>(Enumerable.Range(1, 1000000));/*生成元素加入约瑟夫环*/
            int 序 = 2 - 1, 报 = 8 - 1, 量 = 贝.Count();/*报数减去自身报1因此要-1,元素序从0开始因此要-1*/
            do/*这是真实逐个排除的设计环算法:10000运行1.7秒,10万运行14.7秒,*/
            {/*顺环计算,当序=数组量时,因为序应是-1的,那么,等于数组量的序就要转到序0处*/
                序 = ((序 + 报) % 量 == 0) ? 0 : (序 + 报) % 量;
                Console.WriteLine("出局数: {0}", 贝[序]);
                贝.RemoveAt(序);
                量 = 贝.Count();
            } while (贝.Count() > 1);
            Console.WriteLine("\n胜出数: {0}", 贝[0]);
这样设计是不是就减少了时间空间复杂度了? 还是主题的事,难道就没人愿意说说?或给资料地址,有时要找资料确不是件很容易的事,是否有大神给没读书的我举例通俗的说说? 你那叫死读经的念头,不是佛所教的,我不要,我这叫活读经,岂是你目前所知!
引用 9 楼 KarasCanvas 的回复:
出家人不好好念佛经写什么代码
  • 打赏
  • 举报
回复
引用 8 楼 laviewpbt 的回复:
这是很正常 的事情,不要以为你机器有很大的内存,系统就可以给你分配很大的内存。要知道new 这些函数分配的内存必须是连续分布的,系统一般情况下不会有那么大的连续内存块。一般能分配个500MB的内存就算很幸运了。
那么,请教一下C++动态数组还有哪种写法是安全的,没学过目前只是依样画葫芦! 这么看来C#安全代码是很好的很安全运行的了!
种草德鲁伊 2014-04-07
  • 打赏
  • 举报
回复
出家人不好好念佛经写什么代码
laviewpbt 2014-04-07
  • 打赏
  • 举报
回复
这是很正常 的事情,不要以为你机器有很大的内存,系统就可以给你分配很大的内存。要知道new 这些函数分配的内存必须是连续分布的,系统一般情况下不会有那么大的连续内存块。一般能分配个500MB的内存就算很幸运了。
  • 打赏
  • 举报
回复
c#运行再图示
  • 打赏
  • 举报
回复
引用 4 楼 superliu1122 的回复:
555555555*4/1024/1024/1024=2.0696 都超过2G了,申请内存失败
怪哉你,我又没做乘法运算,看清楚了.你那样当然失败是很明显的. C++中如果输入10位1111111111是不行的,只能9位,那就不是21亿了,只有2亿,惑!惑!惑!
  • 打赏
  • 举报
回复
更奇怪的是C++如果输入111111111运行正常,输入211111111竟然卡机几分钟同样是9位数字. 有人遇到这怪事?
superliu1122 2014-04-07
  • 打赏
  • 举报
回复
555555555*4/1024/1024/1024=2.0696 都超过2G了,申请内存失败
  • 打赏
  • 举报
回复
就算板起脚指头来算,INT类型也是10位,同样代码在C#中运行:
threenewbee 2014-04-07
  • 打赏
  • 举报
回复
说实话,给你分析到这种程度还不懂,真没法再说了。
threenewbee 2014-04-06
  • 打赏
  • 举报
回复
123456789正好小于21亿。 (一个32bit数,包括最高符号,最大表示到2的31次方-1)近似21亿。 找一本中学电脑课教材自学下吧。
threenewbee 2014-04-06
  • 打赏
  • 举报
回复
数组太大了,555555555甚至都超过了int能表示的最大数值。int最大才21亿多一点。

13,190

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 分析与设计
社区管理员
  • 分析与设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧