PAT 甲级 1059 PAT Ranking 个人错误总结

    技术2022-07-14  76

    这个题的坑比较少,有一个测试点是1 注意一下。 遇到的问题: 1 prime表使用,有时候把表中的数当成了素数了,解决方案是应该创建一个表只存素数,这样能节省不少开销,但是我懒得改了。。 2 对1进行特判,因为只有输入一的时候会输出带有1的式子,所以不能把1加入表中。 3 数字可能会比较大,注意数据类型,我为了省事全换成longlong了,这样绝对不会有事。 4对于输入的素数能判定。 ac代码

    #include<stdio.h> #include<algorithm> #include<string.h> #include<math.h> using namespace std; bool prime[100010]={false}; void printprime() { for(int i=2;i<100010;i++) { if(prime[i]==false) { for(int j=2*i;j<100010;j+=i) { prime[j]=true; } } } } struct factors{ long long int num,x; }fac[10]; int main() { long long int a; printprime(); scanf("%lld",&a); printf("%lld=",a); if(a==1) { printf("1\n"); return 0; } long long int b=(long int)sqrt((double)a); int n=0; for(int i=2;i<b;i++) { if(prime[i]==false&&a%i==0) { fac[n].num=i; for(int j=0;a%i==0;j++) { a/=i; fac[n].x++; } n++; } } if(a!=1) { fac[n].num=a;fac[n].x=1; } for(int i=0;fac[i].x!=0;i++) { printf("%lld",fac[i].num); if(fac[i].x!=1) { printf("^%lld",fac[i].x); } if(fac[i+1].x!=0) { printf("*",fac[i].x); } } printf("\n"); return 0; }
    Processed: 0.016, SQL: 9