A1049
#include<iostream>
#include<vector>
using namespace std;
int n;
int cacl(int n)
{
vector<int> a;
while(n)
{
a.push_back(n%10);
n/=10;
}
int res=0;
for(int i=a.size()-1; i>=0; i--)
{
int d=a[i],left=0,right=0,power=1;
for(int j=a.size()-1; j>i; j--)
left=left*10+a[j];
for(int j=i-1; j>=0; j--)
{
right=right*10+a[j];
power*=10;
}
if(d==0)
res+=left*power;
else if(d==1)
res+=left*power+right+1;
else
res+=(left+1)*power;
}
return res;
}
int main()
{
cin >> n;
cout << cacl(n);
return 0;
}
A1059
#include<iostream>
#include<vector>
using namespace std;
vector<int> zhishu;
bool isPrime(int x)
{
if(x==1)
return false;
for(int i=2; i*i<=x; i++)
if(x%i==0)
return false;
return true;
}
int findprime(int x)
{
int k=2;
while(x%k!=0 || isPrime(k)==false)
k++;
return k;
}
int findgeshu(int x)
{
int cnt=1;
for(int i=x+1; i<zhishu.size(); i++)
{
if(zhishu[i]==zhishu[x])
cnt++;
}
return cnt;
}
int main()
{
int n,m;
cin >> n;
m=n;
while(n>1)
{
zhishu.push_back(findprime(n));
n/=findprime(n);
}
cout << m << "=";
bool flag=true;
for(int i=0; i<zhishu.size(); i++)
{
if(findgeshu(i)>1)
{
if(flag)
{
flag=false;
}
else
cout << "*";
cout << zhishu[i] << "^" << findgeshu(i);
i+=findgeshu(i)-1;
}
else
{
if(flag)
{
flag=false;
}
else
cout << "*";
cout << zhishu[i];
}
}
return 0;
}
A1081
#include<iostream>
using namespace std;
typedef long long LL;
LL gcd(LL a, LL b) //辗转相除法,求最大公约数
{
return b?gcd(b,a%b):a;
}
int main()
{
int n;
cin >> n;
LL a=0,b=1;
for(int i=0; i<n; i++)
{
LL c,d;
scanf("%lld/%lld",&c,&d);
int t=gcd(c,d);
c/=t;
d/=t;
t=gcd(b,d);
a=a*d/t+c*b/t;
b=b*d/t;
t=gcd(a,b);
a/=t;
b/=t;
}
if(b==1) //此时 表示 是 一个 整数
printf("%lld",a);
else
{
if(a>b) //此时 表示 假分数
{
printf("%lld ",a/b);
a%=b;
}
printf("%lld/%lld",a,b); //此时 表示 真分数
}
return 0;
}
A1088
#include<iostream>
using namespace std;
typedef long long LL;
LL gcd(LL a, LL b)
{
return b?gcd(b,a%b):a;
}
void print(LL a, LL b)
{
LL t=gcd(a,b);
a/=t;
b/=t;
if(b<0) //如果分母为负数,分子与分母同乘-1
{
a*=-1;
b*=-1;
}
bool ff=a<0;
if(ff)
cout << "(";
if(b==1)
{
printf("%lld",a);
}
else
{
if(abs(a)>=b)
{
printf("%lld ",a/b);
a=abs(a)%b;
}
printf("%lld/%lld",a,b);
}
if(ff)
cout << ")";
}
void add(LL a, LL b, LL c, LL d)
{
print(a,b);
cout << " + ";
print(c,d);
cout << " = ";
a=a*d+b*c;
b=b*d;
print(a,b);
cout << endl;
}
void sub(LL a, LL b, LL c, LL d)
{
print(a,b);
cout << " - ";
print(c,d);
cout << " = ";
a=a*d-b*c;
b=b*d;
print(a,b);
cout << endl;
}
void mul(LL a, LL b, LL c, LL d)
{
print(a,b);
cout << " * ";
print(c,d);
cout << " = ";
a=a*c;
b=b*d;
print(a,b);
cout << endl;
}
void div(LL a, LL b, LL c, LL d)
{
print(a,b);
cout << " / ";
print(c,d);
cout << " = ";
if(c==0)
cout << "Inf" << endl;
else
{
a=a*d;
b=b*c;
print(a,b);
cout << endl;
}
}
int main()
{
LL a,b,c,d;
scanf("%lld/%lld %lld/%lld",&a,&b,&c,&d);
add(a,b,c,d);
sub(a,b,c,d);
mul(a,b,c,d);
div(a,b,c,d);
return 0;
}
A1096
/*
这道题 实质 就是 求 n是某个连续数字相乘的倍数,然后我们找出这个连续数字的最大长度
题中所说的 最小的序列 比如 abc def 这两个连续的数字 序列 均满足 abc=def=n 但是 def的每个值都大于abc,这就不可能,所以只要能找出的就是 最小的 序列
这道题 解法是
从2 开始 , 看看630是不2*3的倍数 ,然后再看630是不2*3*4的倍数
再从3开始,依次类推
*/
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> res;
//注意i<=n/i 比 i*i<=n正确
for(int i=2; i<=n/i; i++) //如果i*i>n了,那么i一定不是n的因子
{
if(n%i==0)
{
vector<int> temp;
for(int j=i,m=n; m%j==0; j++)
{
temp.push_back(j);
m/=j;
}
if(res.size()<temp.size())
{
res=temp;
}
}
}
if(res.size()==0)
{
cout << 1 << endl << n;
return 0;
}
cout << res.size() << endl;
for(int i=0; i<res.size(); i++)
{
if(i!=0)
cout << "*";
cout << res[i];
}
return 0;
}
A1103
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=410;
int f[21][maxn][maxn];
int n,p,k;
int power(int a,int b)
{
int res=1;
for(int i=0; i<b; i++)
res*=a;
return res;
}
int main()
{
cin >> n >> k >> p;
memset(f,-0x3f,sizeof f);
f[0][0][0]=0;
int m;
for(m=1; ; m++)
{
int v=power(m,p);
if(v>n)
break;
for(int i=0; i<=n; i++)
for(int j=0; j<=k; j++)
{
f[m][i][j]=f[m-1][i][j];
if(i>=v && j)
{
f[m][i][j]=max(f[m][i][j],f[m][i-v][j-1]+m);
}
}
}
m--;
if(f[m][n][k]<0)
cout << "Impossible";
else
{
bool flag=true;
cout << n << " = ";
while(m) //选择 某一个 数字 开始 向前 递减
{
int v=power(m,p);
while(n>=v && k && f[m][n-v][k-1]+m==f[m][n][k]) //m是可以重复,所以用while循环
{
if(flag)
flag=false;
else
cout << " + ";
cout << m << "^" << p;
n-=v;
k--;
}
m--;
}
}
return 0;
}
A1104
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
long double res=0; //这个res必须 写成 long double类型 否则 不能ac
for(int i=1; i<=n; i++)
{
double temp;
cin >> temp;
res+=temp*i*(n-i+1);
}
printf("%.2Lf",res); //long double类型 的 %Lf
return 0;
}
A1112
/*
总的思路,对于字符串进行标记,如果是 有 问题的 字符,在st中标记为0,没有问题的字符 标记为1
然后 根据 字符 中 标记的 值 ,如果是有问题的 直接 输出,并且 将st中的值 改为2,如果是没有将字符 加入到 res中,
如果是坏的 字符,需要 跳转
*/
#include<iostream>
using namespace std;
const int maxn=200;
int st[maxn];
int main()
{
int k;
string s;
cin >> k >> s;
for(int i=0; i<s.size(); i++)
{
int j=i+1;
while(j<s.size() && s[i]==s[j])
j++;
int len=j-i;
if(len%k) //表示该字符就是 正常的
st[s[i]]=1;
i=j-1; //后面 又有 一个 i++
}
string res;
for(int i=0; i<s.size(); i++)
{
if(st[s[i]]==0)
{
cout << s[i];
st[s[i]]=2;
}
if(st[s[i]]==1)
{
res+=s[i];
}
else
{
res+=s[i];
i+=k-1;
}
}
cout << endl << res << endl;
return 0;
}
A1116
#include<iostream>
#include<unordered_set>
using namespace std;
const int maxn=10010;
int n;
int st[maxn];
bool isPrime(int x)
{
for(int i=2; i*i<=x; i++)
if(x%i==0)
return false;
return true;
}
int main()
{
cin >> n;
unordered_set<int>s;
for(int i=1; i<=n; i++)
{
int temp1;
cin >> temp1;
st[temp1]=i;
s.insert(temp1);
}
int k;
cin >> k;
bool inq[maxn]={false};
for(int i=0; i<k; i++)
{
int temp2;
cin >> temp2;
if(s.count(temp2)==0)
{
printf("%04d: Are you kidding?\n",temp2);
}
else
{
if(inq[temp2]==false)
{
if(st[temp2]==1 || st[temp2]==0)
{
printf("%04d: Mystery Award\n",temp2);
}
else if(isPrime(st[temp2]))
{
printf("%04d: Minion\n",temp2);
}
else
{
printf("%04d: Chocolate\n",temp2);
}
inq[temp2]=true;
}
else
{
printf("%04d: Checked\n",temp2);
}
}
}
return 0;
}
A1152
#include<iostream>
using namespace std;
int n,l;
bool isPrime(int x)
{
if(x==1 || x==0)
return false;
for(int i=2; i*i<=x; i++)
if(x%i==0)
return false;
return true;
}
int main()
{
cin >> n >> l;
string a,b;
cin >> a;
for(int i=0; i+l<=a.size(); i++) //加上一个l
{
string temp=a.substr(i,l);
int temp1=stoi(temp);
if(isPrime(temp1))
{
cout << temp;
return 0;
}
}
cout << 404;
return 0;
}