PTA-L1-025 正整数A+B (15分) 题解
题目:PTA-L1-025 正整数A+B (15分)

看题要注意的几点:
1.A和B都在区间【1,1000】内(所以字符串长度超过4,绝对不合要求)
2.A,B之间以第一个空格隔开 (A字符串中不会出现空格,B字符串中可能出现空格)
3.A,B字符串中不能出现除0~9以外的任意字符
4.A,B字符串的第一个字符不可以是负号(-)和零(0)
5.当以上情况排除后只要判断A,B字符串所表达的数字小于1000就可以了。再实现字符串到数字的转换,两数字相加就可以了
#include<stdio.h>
#include<string.h>
int qiuhe(char a[],int n){ //用于实现从字符串转换成数字的操作
int i,sum=0;
for(i=0;i<n;i++){
sum=sum*10+a[i]-48;
}
return sum;
}
int main()
{
char a[20],b[20];
//输入部分 // %s 之后还要输入一个空格!!!
scanf("%s ",a); //输入字符串(以第一个空格为AB分界) scanf输入的字符串中 不可以 存在空格
gets(b); //gets输入的字符串中 可以 存在空格
//判断部分
int n=strlen(a),m=strlen(b),i;
if(n>4) { //判断A B是否超长
memset(a,'\0',sizeof(a)); //一个用于初始化的函数(头文件是:string.h)
a[0]='?';
}
if(m>4) {
memset(b,'\0',sizeof(b));
b[0]='?';
}
for(i=0;i<n;i++){ //判断A B字符串中是否有除数字外的其他字符
if(a[i]<'0'||a[i]>'9'){
memset(a,'\0',sizeof(a));
a[0]='?';
break;
}
}
for(i=0;i<m;i++){
if(b[i]<'0'||b[i]>'9'){
memset(b,'\0',sizeof(b));
b[0]='?';
break;
}
}
if(qiuhe(a,n)>1000||a[0]=='-'||a[0]=='0'){ //判断A,B字符串所表达的数字是否小于1000,第一个字符是否会是0
memset(a,'\0',sizeof(a));
a[0]='?';
}
if(qiuhe(b,m)>1000||b[0]=='-'||b[0]=='0'){
memset(b,'\0',sizeof(b));
b[0]='?';
}
//输出部分
if(a[0]=='?'||b[0]=='?') //若有一个输入不合要求,和就输出 ?
printf("%s + %s = ?\n",a,b);
else{ //若均符合要求,这输出A B的和
printf("%s + %s = %d\n",a,b,qiuhe(a,n)+qiuhe(b,m));
}
return 0;
}

注意:
1.字符串的输入:gets(a);—这一种输入方式可以输入空格
-------------------------scanf("%s",a);----这种输入方式不可以读取空格。
2.memset :头文件(string.h) 用于数组的初始化,可以把数组快速清零
---------------原型:void *memset(void *str, int c, sizeof n);
在上面的代码中我是用这个函数将 不合理的A B字符串 清零 ,然后把数组的第一个字符赋成 ‘ ?’字符
------------------------ 结束----------------------------
我想到哪,就写到哪了,如果有什么不对的地方,希望大家能指出来,蟹蟹。

本文详细解析了PTA-L1-025正整数A+B问题的解题思路及代码实现,强调了字符串转数字、条件判断和输出格式的处理。
6720

被折叠的 条评论
为什么被折叠?



