崩了无数次,最后调好了…还是自己不细心。
我自己试出来的一个错误点是1024,由于break写错位置,导致结果异常奇葩…
#include <bits/stdc++.h>
using namespace std;
struct factor
{
long p;
long k; //exponentially
};
int main(void)
{
long n,N;
bool flag=true;
int num=0;
factor f[10];
scanf("%ld",&n);
N=n;
long sqr=(long)sqrt(1.0*n);
while(flag)
{
flag=false;
for(long i=2;i<=sqr;i++)
{
if(n%i==0)
{
n/=i;
flag=true;
for(int j=0;j<num;j++)
{
if(f[j].p == i)
{
f[j].k++;
break;
}
if(j==num-1)
{
f[num].p=i;
f[num].k=1;
num++;
break;
}
}
if(num==0)
{
f[num].p=i;
f[num].k=1;
num++;
}
break;
}
}
}
if(num==0)
printf("%ld=%ld",N,N);
else
{
printf("%ld=",N);
for(int i=0;i<num;i++)
{
if(i!=0) printf("*");
printf("%ld",f[i].p);
if(f[i].k!=1)
printf("^%ld",f[i].k);
}
if(n!=1)
printf("*%ld",n);
}
}