您的位置:首页 > 其它

FZU 1404 Andy的作业

2009-12-13 15:12 357 查看
Problem Description

Andy每天都有很多作业要做,他的老师总是在说“这些作业你明天必须交上来……”。现在他找你帮忙做其中的一项作业,给出N个整数A1, A2, ..., AN,有 M 个询问 q (L, R),对于每个询问,你要输出一个整数,第L个数到第R个数的乘积,这个乘积不会超过1000位。

Input

输入包含多组测试数据。每组数据第一行为两个整数N,M (N <= 800, M <= 1000) 接下来N行,给出这N个整数。然后M行,每行两个整数L R表示一个询问。

Output

对于每个询问,输出相应的结果。当所有询问结束之后输出“Homework Finished”。

Sample Input

10 5 9 7 9 6 4 9 5 8 3 4 5 9 3 8 8 10 10 10 1 7 1 1 1 1 1

Sample Output

4320 77760 96 4 612360 Homework Finished 1 Homework Finished
/************************************/
因为少考虑了0,害我WA了好多了,,,,,狂无语.....................
#include<iostream>
using namespace std;
#define MAX 10000000000000
int an[801];
unsigned __int64 arr[100];
void f(int aa,int bb)
{
int i,j,m=1,carry;
memset(arr,0,sizeof(arr));
arr[0]=1;
for(i=aa;i<=bb;i++)
if(an[i]==0){printf("0/n");return;}
for(i=aa;i<=bb;i++)
{
carry=0;
for(j=0;j<m;j++)
{
arr[j]=arr[j]*an[i]+carry;
carry=arr[j]/MAX;
arr[j]=arr[j]%MAX;
}
if(carry>0) arr[m++]=carry;
}
printf("%I64u", arr[m-1]);
for(i=m-2;i>=0;i--)
printf("%13.13I64u", arr[i]);
printf("/n");
}
int main()
{
int n,m,i,aa,bb;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=1;i<=n;i++)
scanf("%d",&an[i]);
for(i=1;i<=m;i++)
{
scanf("%d%d", &aa,&bb);
f(aa,bb);
}
printf("Homework Finished/n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: