题目描述
给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。
现在请计算A+B的结果,并以正常形式输出。
输入
输入包含多组数据数据,每组数据占一行,由两个整数A和B组成(-10^9 < A,B < 10^9)。
输出
请计算A+B的结果,并以正常形式输出,每组数据占一行。
样例输入
-234,567,890 123,456,789
1,234 2,345,678
样例输出
-111111101
2346912
源代码
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main(){
long long a,b,sum = 0;
char str1[20],str2[20];
int len1,len2;
while(scanf("%s %s",&str1,&str2) != EOF){
a = 0;
b = 0;
len1 = strlen(str1);
len2 = strlen(str2);
for(int i = 0;i < len1;i ++){
if(str1[i] >= '0' && str1[i] <= '9'){
a = a*10 + str1[i] - '0';
}
}
if(str1[0] == '-'){
a = - a;
}
for(int i = 0;i < len2;i ++){
if(str2[i] >= '0' && str2[i] <= '9'){
b = b*10 + str2[i] - '0';
}
}
if(str2[0] == '-'){
b = - b;
}
sum = a + b;
printf("%d\n",sum);
}
return 0;
}
做题思路
1、明确输入何时停止
while循环条件是没有输入(即输入结束时)。
2、解决有符号输入
判断输入字符串数组的第一个字符是不是’ - ‘,如果是,就为负的。
3、得到A和B的数值
for循环找到字符串中的数字,再计算出A和B
4、得到A+B的值
sum = A + B;
总结
一开始,不明白如何输入,可以方便进行计算。还用了string类型,将其看成数组,然而运行还是不正确的。最后,看了别人写的代码,发现一开始定义数组类型,然后再以字符串输入,就可以达成输入的目的了。
在计算a和b的时候,用了比较巧妙的方法:就是在数组中从头至尾的查找,找到为数字的那几项,然后×10就可以得到A和B的值。在题目中的 “ 从个位开始,每三位数用逗号 ‘ , ’ 隔开 ”,就是一个干扰的条件,完全没有必要去想这个条件。在之前的解题思考的时候,我就掉到这个陷阱中了,一直在思考逗号这个条件如何去使用,还想着可以利用逗号的条件就可以得知每位×10的个数,但是这个太复杂,所以在解题思路方面还需要在磨练。
之后要做的事情就是将两数相加就可以了。
纵观全局,就是在输入和得到A和B数值的地方比较难,希望在做过一些题之后,可以找到做题的灵感和思路。