1817: A+B
时间限制: 1 Sec 内存限制: 32 MB
题目描述
给定两个整数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
本题为10年浙大复试机考题
由题意分析思路:
本题算法十分简单,普通的变量加法。
由题意可知输入的数据类型为字符型,因此应该尝试将字符型转换为int型进行计算。
而本题中字符型与int型的区别在于多了’,’,如果我们能将逗号剔除则剩余部分就是int变量,故本题重点在于编码剔除逗号从而进行字符型变量向int型变量的转换。
代码如下:
#include<cstdio>
#include<cstring>
int main(){
char s1[50],s2[50];
while(scanf("%s%s",s1,s2)!=EOF){
int resualt1=0;
int resualt2=0;
int len1=strlen(s1);
int len2=strlen(s2);
for(int i=0;i<len1;i++){ //实现char型转换int型
if(s1[i]>='0'&&s1[i]<='9'){
resualt1=resualt1*10+s1[i]-'0';
}
}
if(s1[0]=='-'){ //负值也需要注意
resualt1=-resualt1;
}
for(int i=0;i<len2;i++){
if(s2[i]>='0'&&s2[i]<='9'){
resualt2=resualt2*10+s2[i]-'0';
}
}
if(s2[0]=='-'){
resualt2=-resualt2;
}
printf("%d\n",resualt1+resualt2);
}
return 0;
}
需要注意的是Codeup采用多点测试(多点测试在我的另一篇博文中有介绍),因此采用while判断的方式进行输入。
其中resualt1=resualt110+s1[i]-‘0’;此行语句中s1[i]-'0’可以使结果成为int型,因为字符’0’的ASCII码为48,而’1’的ASCII码为49,2为50依次类推,他们之间的差值正好与数字的差值相同,故可以通过char-'0’的方式得到int型,在此处将语句写成resualt1=resualt110+s1[i]-48;也是完全可行的。