4-1 改错题
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
输入一个长度小于10的数字字符串,将其拆分成两段子串(每个子串长度大于0),将两段子串分别转换成对应整数后再求它们的和,输出所有可能的拆分方式及得到的和值,输出其中的最大和值。
提示:库函数“char *strncpy(char *dest,const char *src,unsigned maxlen);”的功能是将src指向的字符串中前maxlen个字符复制到dest指向的存储区。
【含有错误的源程序】
#include<stdio.h>
#include<string.h>
int atoi(char *s)
{ int m=0;
while(*s)
{ m=m*10+*s;
s++;
}
return m;
}
int divide(char s[],int n,int r[][])
{ static char one[10],two[10];
int max=0,a,b; int i;
for(i=0;i<n-1;i++)
{ strncpy(one,s,i+1);
strcpy(two,s+i);
a=atoi(one);
b=atoi(two);
r[i][0]=a; r[i][1]=b; r[i][2]=a+b;
if(max<a+b) max=a+b;
}
return max;
}
int main()
{
static char num[10];
int max,res[10][3];
int i,k;
scanf("%s", num[10]);
k=strlen(num);
max=divide(num,k,res);
for(i=0;i<k-1;i++)
printf("%d+%d=%d\n",res[i][0],res[i][1],res[i][2]);
printf("summax is:%d\n",max);
return 0;
}
测试案例:
输入:
123456789
输出:
1+23456789=23456790
12+3456789=3456801
123+456789=456912
1234+56789=58023
12345+6789=19134
123456+789=124245
1234567+89=1234656
12345678+9=12345687
summax is: 23456790