L1-025 正整数A+B (15分)
题的目标很简单,就是求两个正整数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:
? + ? = ?
ac code:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int pows(int x,int y){ 4 if (y==0) 5 return 1; 6 int z=x; 7 for (int i=0;i<y-1;++i){ 8 x*=z; 9 } 10 return x; 11 } 12 int main() 13 { 14 char a[10005],b[10005]; 15 int f1=0,f2=0,x=0,y=0; 16 cin>>a; 17 scanf(" %[^\n]",b); 18 for (int i=0;i<strlen(a);++i){ 19 if (a[i]<'0'||a[i]>'9') 20 { 21 f1=1; 22 break; 23 } 24 } 25 for (int i=0;i<strlen(b);++i){ 26 if (b[i]<'0'||b[i]>'9') 27 { 28 f2=1; 29 break; 30 } 31 } 32 if (f1==0){ 33 for (int i=0;i<strlen(a);++i){ 34 x+=(a[i]-'0')*pows(10,strlen(a)-i-1); 35 } 36 if (x<1||x>1000) 37 f1=1; 38 39 } 40 if (f2==0){ 41 for (int i=0;i<strlen(b);++i){ 42 y+=(b[i]-'0')*pows(10,strlen(b)-i-1); 43 } 44 if (y<1||y>1000) 45 f2=1; 46 } 47 if (f1==0) 48 cout<<x<<" + "; 49 else 50 cout<<"? + "; 51 if (f2==0) 52 cout<<y<<" = "; 53 else 54 cout<<"? = "; 55 if (f1+f2==0) 56 cout<<x+y; 57 else 58 cout<<'?';
一道水题卡我很久,总结一下:
1.带空格字符串输入:
如果是字符数组(char a[100]):
a.首选gets(a);
b.若gets()用不了,用scanf(" %[^\n]",a); 如果是字符串类(string str):getline(cin,str);
2.字符串转换成数字:
a.通过传统方法一位一位转过来
b.通过#include<string>头文件中的stoi(const string& str , size_t *idx=0, int base=10)即(stoi(字符串,起始位置,n进制),将 n 进制的字符串转化为十进制) 或者使用atoi(const char* a)
浙公网安备 33010602011771号