杭电的acm 1106题

来源:百度知道 编辑:UC知道 时间:2024/06/16 01:39:10
在电脑上运行结果都正确,但是就通不过submit;出现
Runtime Error
(ACCESS_VIOLATION)
有说是数组越界的问题,可是改了很多次还是不行,请高手帮帮忙啊,

题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1106

我的代码:

#include <iostream>
#include <string>
using namespace std;
const MAX_NUM=100;

void merge(long num[],int n);

void main()
{
string str;
cin>>str;
int len=str.size();

long num[MAX_NUM];
int i=0,j,temp;
for(j=0;j <MAX_NUM;j++)num[j]=0;
for(j=0;j <len;)
{ //字符型转化成整型
temp=str[j]-'0';
if(temp!=5)
{
num[i]=num[i]*10+temp;
j++;
}
else
{
if(j)i++; //排除第一个出现55~情况//
while(str[j]=='5')j++; //去掉连续的5
if(j>len-1)i--; //处理最后出现多个5的情况
}
}

把cin>>str换成
while(cin>>srr)
{
}
要到文件末尾

#include <iostream>
#include <string>
using namespace std;
const int MAX_NUM=100; //未定义类型

void merge(long num[],int n);

void main()
{
string str;
cin>>str;
int len=str.size();

long num[MAX_NUM];
int i=0,j,temp;
for(j=0;j <MAX_NUM;j++)num[j]=0;
for(j=0;j <len;)
{ //字符型转化成整型
temp=str[j]-'0';
if(temp!=5)
{
num[i]=num[i]*10+temp;
j++;
}
else
{
if(j)i++; //排除第一个出现55~情况//
while(str[j]=='5')j++; //去掉连续的5
if(j>len-1)i--; //处理最后出现多个5的情况
}
}
merge(num,i+1);
for(j=0;j <=i;j++)cout <<num[j] <<" "; //< <你多了两个空格
}

void merge(long num[],int n)
{ //选择排序
long temp;
int k;