测试点2是一个大数,开始预设数组为s[10],不过。改为s[100]后过。
测试点3为1
#include <iostream>
#include <math.h>
using namespace std;
int Judge(int n)//判断是否为质数
{
int i;
if (n < 2)return 0;
if (n == 2)return 1;
for (i = 2; i <= sqrt(n); i++)
{
if (!n%i)return 0;
}
return n;
}
long int C(long int &n)//求因子
{
int i;
for (i = 1; i <= n; i++)//如果已经无法分解,则除以自身,返回1
{
if (n%i == 0 && (Judge(i)))
{
n = n / i;
return i;
}
}
return n;
}
int main()
{
long int n,n1;
cin >> n;
n1 = n;
int i;
int s[100];
int temp = 0;
if (n == 1)
{
cout << n << "=" << n;
system("pause");
return 0;
}
do
{
i = C(n1);
s[temp] = i;
temp++;
} while (i != 1);
//输出
int flag = 0;
cout << n << "=";
int count = 1;
for (i = 0; i < temp-1; i++)
{
if (i < temp-2 && s[i+1] == s[i])
count++;
else if (count != 1)
{
if (flag == 0)
{
cout << s[i] << "^" << count;
flag = 1;
}
else
{
cout << "*" << s[i] << "^" << count;
flag = 1;
}
count = 1;
}
else
{
if (flag == 0)
{
cout << s[i];
flag = 1;
}
else
{
cout <<"*"<< s[i];
}
}
}
system("pause");
return 0;
}