栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

ZCMU--1180: a1*a2*a3*...*an(C语言)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ZCMU--1180: a1*a2*a3*...*an(C语言)

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;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/955426.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号