#39306: 記憶體區段錯誤怎麼辦


11030035@mail.hpsh.tp.edu.tw (和平110級蔡侑蒔)

學校 : 不指定學校
編號 : 234613
來源 : [61.64.24.249]
最後登入時間 :
2024-02-05 00:36:31
a010. 因數分解 | From: [61.64.24.249] | 發表日期 : 2024-02-05 00:52

這段程式碼我用DEV C++的軟體上都能跑得出來,但在這裡跑時都會出現記憶體區段錯誤,以下是我的程式碼,請問該怎麼處理?
 
#include<iostream>
using namespace std;
 
int a(int x)
{
int i;
for(i=2;i<x;i++)
{
if(x%i==0)
{
return i;
}
}
}
int main()
{
int x;
cin>>x;
int e=0;
int*n=new int[1000];
while(x%a(x)==0)
{
n[e++]=a(x);
x=x/a(x);
}
int y=1;
int q;
int k;
int b;
if(n[1]==0)
{
cout<<n[0];
}
while(b<(e-1))
{
if(n[q]==n[q+1])
        {
        y=1;
        k=q;
        while(n[k]==n[k+1])
        {
        y=y+1;
        k=k+1;
        b=b+1;
}
        cout<<n[q]<<"^"<<y;
        q=q+y-1;
        }
        else if(n[q+1]!=n[q+2] || n[q+1]==0)
        {
        if(y>1 && n[q]!=n[q+1])
                {
                  cout<<" * "<<n[q+1];
                q=q+1;
                b=b+1;
        }
            else
            {
            cout<<n[q]<<" * "<<n[q+1];
            q=q+1;
            b=b+1;
            }
}
else
{
if(y>1 && n[q]!=n[q+1])
                {
                  cout<<" * ";
                q=q+1;
                b=b+1;
        }
            else
            {
            cout<<n[q]<<" * ";
            q=q+1;
            b=b+1;
            }
}
}
}
 
#39315: Re: 記憶體區段錯誤怎麼辦


liaoweichen1024@gmail.com (M_SQRT)

學校 : 新北市立新莊高級中學
編號 : 195452
來源 : [122.116.111.175]
最後登入時間 :
2024-11-10 18:46:03
a010. 因數分解 | From: [122.116.111.175] | 發表日期 : 2024-02-05 06:38

這支程式問題有點多,要全改完很麻煩,建議下周再回來看這題,全部重寫一次。

注意事項:
1. a()函式有可能出現沒有return的情況,此時系統若自動return 0,你除以回傳值的計算會直接爛掉。
2. a()函式的設計其實也沒有很理想,計算因數時一個迴圈就可以了,可以再想想看怎麼做比較好。
3. 變數與陣列的初始內容不一定全是0,好像很多判斷都是把它們當作是0來算的,這也會出問題。

 
ZeroJudge Forum