Codeforces 614B Gena’s Code (字符串找规律)
题意
求所有国家的坦克数的积,所有的国家的坦克数都是由1个1和数个0组成的十进制美丽数,最多有一个国家的坦克数不是美丽数。
思路
一想好像和美丽数没啥关系,Java走起,直接BigInteger高精度。然而T在第十发,CF竟然不给Java双倍的时间。
这个时候美丽数派上用场了,因为美丽数都是10的幂,所以一共数有几个0,然后输出唯一的不是美丽数的数字最后输出所有清点到的0就可以了。需要注意的是,如果没有非美丽数,那么则需要在头部添加一个1.如果乘了一个0,直接输出0就行。
代码
#include <iostream>
using namespace std;
int main() {
int n;
cin>>n;
string ans="1";//没有非美丽数的时候头部需要一个1
int zeros=0;
bool iszero=false;
for(int i=0;i<n;i++)
{
string temp;
cin>>temp;
if(iszero)
{
continue;
}
if(temp=="0")
{
ans="0";
zeros=0;
iszero=true;//乘了0,直接输出0
}
if(temp[0]!='1')//不以1开头的肯定不是美丽数
{
ans=temp;
continue;
}
int ones=0;
int zero=0;
bool flag=false;
for(int j=0;j<temp.size();j++)
{
if(temp[j]=='1')
{
ones++;
}
else if(temp[j]=='0')
{
zero++;
}
else
{
flag=true;
break;
}
}
if(flag || ones!=1)//如果有两个以上的1,那也是非美丽数
{
ans=temp;
}
else
{
zeros+=zero;
}
}
cout<<ans;
for(int i=0;i<zeros;i++)
{
cout<<0;//输出清点出来的所有0
}
cout<<endl;
return 0;
}