#include <iostream>
#include <cstdio>
using namespace std;
int num;
int primelist[100];
int main()
{
cin >> num; //读入待分解质因数的整数
freopen("primelist.txt","r",stdin);
for(int i = 0; i < 100;i++)
{
cin >> primelist[i];
}
cout << num << "= ";
int k = 0;
while(num != 0)
{
if(num % primelist[k] == 0)
{
cout << primelist[k] << " * ";
num /= primelist[k];
//k++; 注意这里不能跳到下一个质数去,比如90 = 2 * 3 * 3 * 5
}
else
{
k++;
}
}
return 0;
}
上面的程序有几个问题:
- 没有特判,对于<2的情况(包括负数),是无法进行质因数分解的,会在while进入死循环
- 只是针对合数的质因数分解,对于质数同样会死循环
#include <iostream>
#include <cstdio>
using namespace std;
int num;
int primelist[100];
int main()
{
cin >> num; //读入待分解质因数的整数
if(num < 2)
{
cout << "不能进行质因数分解" << endl;
}
else
{
freopen("primelist.txt","r",stdin);
for(int i = 0; i < 100;i++)
{
cin >> primelist[i];
}
cout << num << "= ";
int k = 0,times = 0;
while(num != 0)
{
if(num == primelist[k] && times == 0)
{
cout << primelist[k] << " * 1"; //是质数 1*本身
break;
}
if(num % primelist[k] == 0)
{
cout << primelist[k] << " * ";
num /= primelist[k];
times++;
//k++; 注意这里不能跳到下一个质数去,比如90 = 2 * 3 * 3 * 5
}
else
{
k++;
}
}
}
return 0;
}
想了想发现自己又错了,不对啊,分解质因数,怎么针对质数的情况是1 * 本身,1不是质因数啊?
是的,质数是不能分解质因数的……(捂脸
#include <iostream>
#include <cstdio>
using namespace std;
int num;
int primelist[100];
int main()
{
cin >> num; //读入待分解质因数的整数
if(num < 2)
{
cout << "不能进行质因数分解" << endl;
}
else
{
freopen("primelist.txt","r",stdin);
for(int i = 0; i < 100;i++)
{
cin >> primelist[i];
}
cout << num << "= ";
int k = 0,times = 0;
while(num != 0)
{
if(num == primelist[k] && times == 0)
{
cout << "质数不能分解质因数";
break;
}
if(num % primelist[k] == 0)
{
cout << primelist[k] << " * ";
num /= primelist[k];
times++;
//k++; 注意这里不能跳到下一个质数去,比如90 = 2 * 3 * 3 * 5
}
else
{
k++;
}
}
}
return 0;
}
让我再想想 * 怎么能输出的好看一些……