ABC 169
A题太水,无需解释,跳~
刚学c++的熊孩子都会做
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
cout<<a*b<<endl;
return 0;
}
B题 B - Multiplication 2
题目解释:就是A1A2…An,让你计算结果,如果大于10^18,就输出“-1”*
思路非常简单,与其做乘法不如做除法
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
int main()
{
std::ios::sync_with_stdio(false);
cin>>n;
ll a[n+1];
ll prod=1;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]==0)//特判很重要
{
cout<<"0";
return 0;
}
}
for(ll i=1;i<=n;i++)
{
if(a[i]<=1000000000000000000/prod) //如果乘上这个数,不会超过10^18,那就乘,反之,表明会超过10^18,输出-1即可
prod*=a[i];
else
{
cout<<"-1";
return 0;
}
}
cout<<prod;
return 0;
}
下面看C题:C - Multiplication 3
这题也很水,一句话,把B100A / 100然后就搞定了
#include <bits/stdc++.h>
using namespace std;
long long a;
double b;
int main()
{
cin>>a>>b;
b*=100;
cout<<int(a*b/100);
return 0;
}
再来D题:D - Div Game
题目很容易理解,在这儿就不解释了。
其实就是数字的质因数分解。
题目要找的是能被n整除的质数的次方
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n,ans=0,i,j;
cin>>n;
for(i=2;i*i<=n;i++)
{
j=i;
while(n%j==0)
{
ans++;
n/=j;
j*=i;
}
while(n%i==0) n/=i;
}
cout<<ans+(n>1);//要判断一下n是否大于1
return 0;
}