Description
求a1*a2*a3*...*an的值
Input
第一行一个整数T,表示接下来有T行
每行一个正整数是N,然后是N个正整数a1,a2,a3...an,(0
Output
输出值
Sample Input
2
5 1 2 3 4 5
4 1000 1000 1000 1000
Sample Output
120
1000000000000
解析:大数用数组~这道题是小高精度×低精度(留了条活路),我们可以将第一个输入的数存为a[0],然后后面输入的L,然后a[]数组每个位置乘上L,然后再遍历0~m-1(m代表长度),然后第m位,单独拿出来,满10不断进位,m++,这样我们就可以每次直接知道这个结果有多长,避免超时,也方便最后不用考虑前导零。
注意:会出现0!!出现了话,我们就记录一下,输出时候直接输出0,不加这个特判的话,会输出类似0000这种答案,导致WA。
#include
int a[5000];
int main()
{
int t,n,i,l,m,shi;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
scanf("%d",&a[0]); //第一个数
n--,m=1,shi=0; //m是结果长度,shi代表是否出现0!!!
while(n--){
scanf("%d",&l);
if(l==0) shi=1; //记录出现0!!!
for(i=0;i10){ //小核心好吧,满10就进位,m++,如果还是满10,再如此反复进位
a[m]=a[m-1]/10;
a[m-1]%=10;
m++;
}
}
if(shi==1){ //出现0,直接是0
printf("0n");
continue;
}
for(i=m-1;i>=0;i--) printf("%d",a[i]); //输出即可
printf("n");
}
return 0;
}