![](https://i-blog.csdnimg.cn/blog_migrate/bff59cd1ae4f8104f5ac01446a0d7b81.png)
这里要注意B的输入,B可以有空格(例如:9 ajks),这也是第4个测试的的坑,直接用scanf读入AB的话,因为会造成读入不完全,B只读入了9,而造成错误,所以B的话最好用gets读入。
还要注意的是数字的范围是1-1000。
#include <stdio.h>
#include <string.h>
int pd(char arr[],int sz)//判断函数
{
if(sz>4)
{
arr[0] = '?';
return 1;
}
for(int i = 0;i<sz;i++)
{
if(arr[0]== '0')
return 1;
if(arr[i]<'0'||arr[i]>'9')
return 1;
}
return 0;
}
int num(char arr1[],int sz1)//转换为数字
{
int n = 0;
for(int i = 0;i<sz1;i++)
{
n = n*10+(arr1[i]-'0');
}
return n;
}
int main()
{
char ch1[10] = {0};
char ch2[10] = {'?'};
int sz1 = 0,sz2 = 0;
scanf("%s ",ch1);//注意读入格式
gets(ch2);
sz1 = strlen(ch1);
sz2 = strlen(ch2);
if(pd(ch1,sz1))
{
ch1[0]='?';
}
if(pd(ch2,sz2))
{
ch2[0]='?';
}
if(ch1[0]=='?' && ch2[0]=='?')
printf("? + ? = ?\n");
else if(ch1[0]=='?')
printf("? + %s = ?\n",ch2);
else if(ch2[0]=='?')
printf("%s + ? = ?\n",ch1);
else
{
int num1 = num(ch1,sz1);
int num2 = num(ch2,sz2);
if((num1>=1 && num1<=1000) && (num2>=1 && num2<=1000))
printf("%s + %s = %d\n",ch1,ch2,num1+num2);
else if((num1<1 || num1>1000) && (num2<1 || num2>1000))
printf("? + ? = ?\n");
else if(num1<1 || num1>1000)
printf("? + %s = ?\n",ch2);
else if(num2<1 || num2>1000)
printf("%s + ? = ?\n",ch1);
}
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/32e66ab11e4875f55309631fa11fb559.png)
——————————————————————————————————————————
到这里就结束了,如有错误,请指出。(因为本人是新手,所以写的代码可能有些繁杂,还请多多包涵,谢谢啦!)