while if循环问题,程序发生段错误,求指导

C++语言 码拜 9年前 (2016-04-18) 1577次浏览
【编程题】质数因子
功能:输入一个正整数,按照从小到大的顺序输出它的全部质数的因子(如180的质数因子为2 2 3 3 5 )
输入描述:
输入一个long型整数
输出描述:
按照从小到大的顺序输出它的全部质数的因子,以空格隔开
输入例子:
180
输出例子:
2 2 3 3 5
本人的代码while (n > 1)条件下再判断if (n % p == 0),编译器报错:段错误:您的程序发生段错误,可能是数组越界,堆栈溢出(例如,递归调用层数太多)等情况引起,为什么不可以这样写啊,不懂,求指导

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    long n;
    int i = 0, p = 2;
    vector <int> a;
    
    while (cin >> n)
    {
        while (n > 1)
        {
            if (n % p == 0)
            {
                n = n / p;
                a[i] = p;
                ++i;
            }
            else
            	++p;
        }
        for (int i = 0; i < a.size(); ++i)
            cout << a[i] << " ";
    }
    return 0;
}
解决方案

5

之前vector用法错误,可以改成a.push_back(p);
建议lz好好理解下vector是什么

10

眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步Debug版对应汇编一行!
单步Debug版对应汇编千行不如单步Release版对应汇编一行!
不会单步Release版对应汇编?在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建全部,然后在IDE中运行。(一般人本人不告诉他!

40

引用:

改了代码,通过了,之前写得太啰嗦了

#include <iostream>
using namespace std;
int main()
{
    long n;
    int p = 2;
    
    while (cin >> n)
    {
        while (n > 1)
        {
            if (n % p == 0)
            {
                n = n / p;
                cout << p << " ";
            }
            else
            	++p;
        }
    }
    return 0;
}

新改这个本人帮你调试了,没问题啊

5

改的不错。

5

引用:
Quote: 引用:

之前vector用法错误,可以改成a.push_back(p);
建议lz好好理解下vector是什么

vector用法没错,可以用下标访问的,之前是复杂度太高所以没通过

vector是可以用下标访问,但你的代码而言,在赋值时,用下标可能导致越界。push_back会自增长,用下标不会。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明while if循环问题,程序发生段错误,求指导
喜欢 (0)
[1034331897@qq.com]
分享 (0)