问题标题: 酷町堂:2697

0
0
已解决
胡靖坤
胡靖坤
中级守护
中级守护

2697   拆分整数

经验值:1200 时间限制:1000毫秒

蜀山区2009年信息学竞赛试题

不许抄袭,一旦发现,直接清空经验!

题目描述 Description

输入一个正整数N,不超过100位。如果N为偶数,则拆分成各位数字相加求和;如果N为奇数,则拆分成各位数字相乘求积。

输入描述 Input Description

一个正整数

输出描述 Output Description

如果是偶数,输出各位之和S,格式为H=S
如果是奇数,输出各位之积T,格式为J=T

样例输入 Sample Input

样例1 126 样例2 123

样例输出 Sample Output

样例1 H=9 样例2 J=6


0
已采纳
被禁言 张皓轩
张皓轩
中级光能
中级光能
核心:
int a[1005],b[1005],c[1005];
string s;
void Mul(){
    memset(c,0,sizeof(c));
    c[0]=a[0]+b[0];
    for(int i=1;i<=a[0];i++){
        for(int j=1;j<=b[0];j++){
            c[i+j-1]+=a[i]*b[j];
        }
    }
    int jw=0;
    for(int i=1;i<=c[0];i++){
        c[i]=c[i]+jw;
        jw=c[i]/10;
        c[i]%=10;
    }
    while(c[c[0]]==0){
        c[0]--;
    }
}
void swap(){
    a[0]=c[0];
    for(int i=1;i<=c[0];i++){
        a[i]=c[i];
    }
}
int main(){
    cin>>s;
    if(((int)s[s.size()-1]-48)%2==0){
        long long sum=0;
        for(int i=0;i<s.size();i++){
            sum+=s[i]-48;
        }
        cout<<"H="<<sum;
    }else{
        c[0]=1;
        c[1]=1;
        for(int i=0;i<s.size();i++){
            swap();
            b[0]=1;
            b[1]=(int)s[i]-48;
            Mul();
        }
        cout<<"J=";
        for(int i=c[0];i>=1;i--){
            cout<<c[i];
        }
}
}

 

我要回答