B - Irreducible Polynomial
原题地址:https://ac.nowcoder.com/acm/contest/887/B
思路:题意为判断一个多项式是否为不可约多项式
1、一次项一定是不可约的
2、二次项则判断是否有解,有解则可约,输出“No”
3、三次项及三次项以上的多项式一定是可约的,输出"No"
代码如下:
#include<iostream>
using namespace std;
int a[25]; //数组a[i]用来存系数
int main()
{
int T;
cin>>T;
while(T--)
{
int n;
cin>>n;
for(int i=0;i<=n;i++)
cin>>a[i];
if((n==2 && a[1]*a[1]>=4*a[0]*a[2])||n>2)
cout<<"No"<<endl;
else
cout<<"Yes"<<endl;
}
return 0;
}
D - Number
原题地址:https://ac.nowcoder.com/acm/contest/887/D
思路:
1、题意是要求输出一个能被素数p整除的含n位数的正数,所以只要满足这两个条件即可,那么答案就有很多啦,因此不要因为测试样例没过就以为程序写错了。
2、分为两种情况:
(1) 素数位数小于等于n,那么只要素数乘以10的(n-res)次方就满足条件了,比如n=5,p=2,那么2*(10^(5-1))=20000即满足条件,res表示素数位数;
(2) 素数位数大于n,肯定不存在一个数能被p整除。
代码如下:
#include<stdio.h>
#include<cmath>
using namespace std;
int main()
{
int n,p,res;
scanf("%d%d",&n,&p);
res=1+log10(p); //计算出素数的位数
if(res>n) //素数位数比n多,不存在
printf("T_T\n");
else //素数位数小于等于n,则素数乘以10的(n-res)次方就满足条件了
{
printf("%d",p);
for(int i=1;i<=n-res;i++)
printf("0");
printf("\n");
}
return 0;
}
J - A+B problem
原题地址:https://ac.nowcoder.com/acm/contest/887/J
思路:
1、题意为分别将两个数a、b逆序转换过来相加,再次逆序转换输出此时的值,前导0删掉
2、自定义一个函数将x逆序转换,分别输入a、b、a+b调用函数即可,具体见代码
代码如下:
#include <iostream>
#include <cstdio>
typedef long long ll;
using namespace std;
ll change(ll x) //自定义函数将x逆序,前导0会自动去掉
{
ll ans=0; //初始化为0
while(x) //当x不为0
{
ans=ans*10+x%10;
x/=10;
}
return ans; //返回逆序后的数
}
int main()
{
int t;
cin>>t;
while(t--)
{
ll a,b;
cin>>a>>b;
//分别将a、b逆序后相加,再把和逆序后输出,前导0会自动删掉
cout<<change(change(a)+change(b))<<endl;
}
}