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;也是完全可行的。
