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