问题标题: 酷町堂:2697 OMG!!!!!!!!!!!!!!

1
0
已解决
汪宇航
汪宇航
新手启示者
新手启示者

输入一个正整数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
已采纳
包思远
包思远
新手启示者
新手启示者

好累呀!!

70分代码:

满分代码:

PS:仅供参考!!不要直接抄!!

1
0
包思远
包思远
新手启示者
新手启示者

字符串,很简单啊!!

0
包思远
包思远
新手启示者
新手启示者

字符串+乘法高精度(加法的和太小,不需要高精度)

高精度笔记(乘法高精度):

不加高精度,只有70分!!(PS:我试了)

0
包思远
包思远
新手启示者
新手启示者

引用模仿“围墙重建”

0
包思远
包思远
新手启示者
新手启示者

模板(围墙重建):

 

0
包思远
包思远
新手启示者
新手启示者
Mul()函数:
无返回值型 Mul(){//乘法                              (无返回值型:void)
    c数组清0;                                    // (  memset(c,0,sizeof(c))   )
    c[0]赋值为 a[0]加b[0];//积的位数                  (c[0]=a[0]+b[0])
    for(整形 i=1;i<=a[0];i++){
        for(int j=1;j<=b[0];j++){
            c[i+j-1]+=a[i]*b[j];//这里一定要+= 
        }
    }
    定义 整形 jw赋初值为0;//jw初值0
    for(整形 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]自减;//高位连续0的情况     (while(c[c[0]==0)c[0]--;
}
swap()函数:
无返回值型 swap(){                                 //  (无返回值型:void)
    a[0]赋值为c[0];
    for(整形 i=1;i<=c[0];i++){
        a[i]赋值为c[i];
    }
}
主函数:
    定义 字符串型 s;
    输入s;
    if(((整形)s[s.size()-1]-48)%2==0){
        定义 超长整形 sum=0;                    // (超长整形:long long)
        for(整形 i=0;i<s.size();i++){
            sum=sum+s[i]-48;
        }
        输出<<"H="<<sum;
    }
    else{
        c[0]赋值为1,c[1]赋值为1;
        for(整形 i=0;i<s.size();i++){
            swap();
            b[0]赋值为1;
            b[1]赋值为 (整形)s[i]-48;        //    (b[1]=(int)s[i]-48)
            Mul();
        }
        输出<<"J=";
        for(整形 i=c[0];i>=1;i--){
            输出<<c[i];
        }
    }

 

我要回答