记录编号 42630 评测结果 AAAAAAAAAA
题目名称 求和问题 最终得分 100
用户昵称 Gravatarskyfisherman 是否通过 通过
代码语言 C++ 运行时间 0.500 s
提交时间 2012-09-27 13:28:52 内存使用 10.83 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring> 
using namespace std;
class num{
    public:
    int a[201], len;
    num(){ len=0; memset(a,0,sizeof(a));}
    void scan(int x){
        len=0;
        for(int t=x;t;t/=10)a[len++]=t%10;
    }
    friend::num operator +(const num&a,const num&b){
        num c; c.len=max(a.len,b.len);
        for(int i=0;i<c.len;i++)c.a[i]=a.a[i]+b.a[i];
        for(int i=0;i<c.len;i++)if(c.a[i]>=10)c.a[i+1]++,c.a[i]-=10;
        if(c.a[c.len])c.len++;
        return c;
    }
    friend::num operator -(const num&a,const num&b){ 
        num c; c=a;
        for(int i=0;i<b.len;i++)c.a[i]-=b.a[i]; 
        for(int i=0;i<c.len;i++)if(c.a[i]<0)c.a[i+1]--,c.a[i]+=10;
        while(!c.a[c.len-1])c.len--;
        return c;
    }    // 不考虑a<b的情况
    friend::num operator *(const num&a,const num&b){
        num c; c.len=a.len+b.len-1;
        for(int i=0;i<a.len;i++)
            for(int j=0;j<b.len;j++) c.a[i]+=a.a[i]*b.a[j];
        for(int i=0;i<c.len;i++)c.a[i+1]+=c.a[i]/10,c.a[i]%=10;
        if( c.a[c.len])c.len++;
        return c;
    } 
    void write(){
        if(len==0){ printf("0\n");return;} 
        for(int i=len-1;i>=0;i--) printf("%d",a[i]); 
        printf("\n"); 
    }
}A[10001],c;
int n,x,y;
int main(){
    freopen("sum.in","r",stdin);
    freopen("sum.out","w",stdout);
    scanf("%d",&n); 
    for(int i=1;i<=n;i++){ scanf("%d",&x); A[i].scan(x); }
    for(int i=2;i<=n;i++) A[i]=A[i]+A[i-1];
    scanf("%d",&n);while(n--){
        scanf("%d%d",&x,&y);
        c=A[y]-A[x-1];c.write();
    }
    return 0;
}