赞
踩
题目大意:输入两行数,分别以其乘积作为分母和分子,输出化约分后的答案。
解题思路:fac数组记录分子和分母质因子出现的次数,如果是分子的话 +1 ,分母的话 -1 ,最后如果fac[i]>0 ,说明分子较大,ans*= pow(i1.0,fac[i])即可,分母的话 ans= pow(i*1.0, - fac[i]);
Code:
#include<iostream> #include<cmath> #include<cstring> using namespace std; int fac[1000005]; void factor(int n,int f){ int a=1; for(int i=2;i<=n/i;i+=a,a=2){ //优化分解质因子,偶数的话直接晒掉了 1 3 5 7 9 11 ~~~~ if(n%i==0){ while(n%i==0){ fac[i]+=f; n/=i; } } } if(n>1) fac[n]+=f; } int main(){ int n,m,tmp,cas,maxs=0; scanf("%d",&cas); for(int k=1;k<=cas;k++){ memset(fac,0,sizeof fac); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ scanf("%d",&tmp); factor(tmp,1); maxs=max(maxs,tmp); } for(int i=1;i<=m;i++){ scanf("%d",&tmp); factor(tmp,-1); maxs=max(maxs,tmp); } int ans=1,ans2=1; for(int i=2;i<=maxs;i++){ if(fac[i]>0) ans*=pow(i*1.0,fac[i]); if(fac[i]<0) ans2*=pow(i*1.0,-fac[i]); } printf("Case #%d: %d / %d\n",k,ans,ans2); } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。