赞
踩
本题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。
输入格式:
输入在一行给出A和B,其间以空格分开。问题是A和B不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。
注意:我们把输入中出现的第1个空格认为是A和B的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。
输出格式:
如果输入的确是两个正整数,则按格式“A + B = 和”输出。如果某个输入不合要求,则在相应位置输出“?”,显然此时和也是“?”。
输入样例1:123 456输出样例1:
123 + 456 = 579输入样例2:
22. 18输出样例2:
? + 18 = ?输入样例3:
-100 blabla bla...33输出样例3:
? + ? = ?
解题思路:
直接模拟。
看到就直接敲了,没有优化= =
过了就好嘛~
这道题主要注重Mark一下新的知识:
(以下来自百度知道:https://zhidao.baidu.com/question/487221426.html)
C语言中可以调用atoi()函数将字符串数字转换成整型数,所需要头文件为stdlib.h
函数原型:int atoi( char *s) ;
函数说明:将字符串s转换为整型值,返回给调用者。
参考代码:
相关函数还有:
atof():将字符串转换为双精度浮点型值。 atol():将字符串转换为长整型值。 strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。 strtol():将字符串转换为长整值,并报告不能被转换的所有剩余数字。 strtoul():将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字。
AC代码:
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- int main()
- {
- char a[1010],b[1010];
- while(~scanf("%s",a))
- {
- getchar();
- gets(b);
- //printf("%s********\n",a);
- //printf("%s********\n",b);
- int l=strlen(a);
- int h=strlen(b);
- int flag1=1,flag2=1;
- if(l>4) flag1=0;
- else
- {
- for(int i=0;i<l;i++)
- {
- if(a[i]<'0'||a[i]>'9') {flag1=0;break;}
- }
- }
- if(l>4) flag2=0;
- else
- {
- for(int i=0;i<h;i++)
- {
- if(b[i]<'0'||b[i]>'9') {flag2=0;break;}
- }
- }
- if(flag1!=0)
- {
- if(atoi(a)<1||atoi(a)>1000) flag1=0;
- }
- if(flag2!=0)
- {
- if(atoi(b)<1||atoi(b)>1000) flag2=0;
- }
- if(flag1==0&&flag2==0) printf("? + ? = ?\n");
- else if(flag1==0&&flag2!=0) printf("? + %s = ?\n",b);
- else if(flag1!=0&&flag2==0) printf("%s + ? = ?\n",a);
- else if(flag1!=0&&flag2!=0) printf("%s + %s = %d\n",a,b,atoi(a)+atoi(b));
- }
- return 0;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。