不输出就停止运行???

dhrbaobao 2006-12-13 09:15:25
这是我写的一个算阶乘的简单程序:
#include <iostream>
using namespace std;

int a[100000],b[100000];
int n;
int flag;//位数

void setzero();
void Doride();
void ride(int i);
void add();
void AtoB();
void print();



void setzero()
{
for(int i=1;i<=100000;i++)
{
a[i]=0;
b[i]=0;
}
a[1]=1;
}


void Doride()
{
cin>>n;
for(int i=2;i<=n;i++)
{
ride(i);
cout<<i<<"jieguo"<<endl;
print();
}

}

void ride(int i)
{
AtoB();
for(int l=2;l<=i;l++)
add();//add b to a i ci

}

void add()
{
for(int i=1;i<=flag;i++)
a[i]+=b[i];
//进位
for(int j=1;j<=flag;j++)
{
if (a[j]>=10)
{
a[j]-=10;
a[j+1]++;
flag++;
}
}
while (a[flag]>=10)
{
a[flag]-=10;
flag++;
a[flag]++;
}
}

void AtoB()
{
for(int i=1;i<=flag;i++)
b[i]=a[i];
}

void print()
{

int i;
for(i=flag;i>=1;i--)
{
if(a[i]!=0)
{
flag=i;
i=0;
}
}
for(i=flag;i>=1;i--)
cout<<a[i];
cout<<endl;


}

void main()
{
flag=1;
setzero();
Doride();
//print();
}
只要不输出结果
即去掉Doride中的
print();
在main中加上print();
输出到82jieguo就自动停止。
求解。。
...全文
161 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dhrbaobao 2006-12-13
  • 打赏
  • 举报
回复
vc6没有给溢出提示而是直接结束运行?
ma100 2006-12-13
  • 打赏
  • 举报
回复
for(int i=2;i<=n;i++)
{
ride(i);
cout<<i<<"jieguo"<<endl;
//print();

}
在print里flag被减小,若一直不调用,则在ride中flag一直增大,导致数组越界
dhrbaobao 2006-12-13
  • 打赏
  • 举报
回复
我用Dev c++测试了一下。结果到82以上不是不输出了。而是直接溢出了。。。
dhrbaobao 2006-12-13
  • 打赏
  • 举报
回复
vc6
不是会标准库的问题吧
jixingzhong 2006-12-13
  • 打赏
  • 举报
回复
你用的什么环境?

用 Dev C++ 测试正常啊 ~~

粗看了一下代码,
程序没有语法问题啊,
输出显然是可以的 ~~
至于结果是否正确再说 ....
dhrbaobao 2006-12-13
  • 打赏
  • 举报
回复
还是一样结果。跟a[0]无关吧。
cunsh 2006-12-13
  • 打赏
  • 举报
回复
void setzero()
{
for(int i=1;i<=100000;i++) //数组下标从0开始的
{
a[i]=0;
b[i]=0;
}
a[1]=1;
}

64,678

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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