题目大意:beautiful数:只由0和1组成且最多有一个1的数
给出n个数,其中最多有一个不是beautiful数,输出这n个数字的乘积
解题思路:由beautiful数的定义可知,beautiful数只有两种:0或10^m,所以只需要记录非beautiful数和统计beautiful数中0的个数,一共有一下三种情况
- 如果出现过0,输出0
- 如果出现非beautiful数,输出非beautiful数,然后输出统计的beautiful数中0的个数
- 没有出现过0,也没有出现过非beautiful数,输出1,然后输出统计的beautiful数中0的个数
AC代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
using namespace std;
#define io ios::sync_with_stdio(0),cin.tie(0)
#define ms(arr) memset(arr,0,sizeof(arr))
#define inf 0x3f3f3f
#define fin freopen("in.txt", "r", stdin)
#define fout freopen("out.txt", "w", stdout)
typedef long long ll;
typedef unsigned long long ULL;
const int mod=1e9+7;
const int N=1e5+7;
int n,m;
char s[N],a[N];
int main()
{
int f1=0,i;
int sum=0;
scanf("%d",&n);
while(n--)
{
scanf("%s",a);
if(a[0]=='0')
{
strcpy(s,a);
f1=1;
}
else
{
if(a[0]=='1')
{
for(i=1;i<strlen(a);i++)
if(a[i]!='0')
break;
if(i==strlen(a))
{
sum+=(strlen(a)-1);
}
else if(f1==0)
{
strcpy(s,a);
f1=1;
}
}
else if(f1==0)
{
strcpy(s,a);
f1=1;
}
}
}
if(f1==0)
{
printf("1");
for(i=0;i<sum;i++)
printf("0");
printf("\n");
}
else if(s[0]=='0')
printf("0\n");
else
{
printf("%s",s);
for(int i=0;i<sum;i++)
printf("0");
printf("\n");
}
return 0;
}