首页 > 代码库 > (ACM_JD)题目1003:A+B

(ACM_JD)题目1003:A+B

此题不仅仅是A+B简单计算的一道题,需要进行字符和数字的灵活转换。

 

题目描述:
给定两个整数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

 

分析:

//题目1003:A+B
/*解题算法: 把输入以字符串形式输入,然后先去掉第一个符号为‘-‘的, 同时用flag = 0,
 *变化成 flag = 1来记录该字符串所表示的数为负数. 这样把字符统一处理为没有 ‘-‘的,
 *根据题意,处理字符串, 得出字符串所表示的数字的位数, 用numC表示,然后按顺序读取字
 *符,将字符转化成数字,然后用pow(10, numC - 1)得出, 同时用SumC来累加这个字符串的
 *每个字符得出的数的结果.最后, 根据flag = 1为负数, 把SumC转换成-SumC,然后两个数的
 *Sum分别相加,得出结果. 再用一个数组来储存这个结果,最后统一输出,这样做事为了符合
 *题列的要求.
*/

 

代码及详细注释:

 1 #include <iostream> 2 #include <cstring> 3 #include <cmath> 4 using namespace std; 5  6  7 int deal(char c[14]) 8 { 9     int SumC = 0;/*把传入的字符化成整形數,用SumC来表示.*/10     int cc = strlen(c);/*数组c[]的長度*/11     int flag1 = 0;    /*标记变化,用来后面用到的判断正负用的*/12     int CC = cc;/*看下面的if, 首先, 如果有‘-‘的, 那么把整个字符串去掉的长度减1,因为负号不是数字*/13 14     if (c[0] == -)/*如果是字符串第一是负号*/15     {16         CC -= 1; /*长度减1,也就是说把它当成正数处理, 比如 -432 长度为4, 处理后为 432, 长度为3*/17         flag1 = 1; /*长度减少后, 用flag记录该数是负数的,flag由0变为1*/18     }19         20     int numC = CC - CC / 4;/*用numC表示位数, 比如 234,567,890 有11个字符, 去掉逗号, 一共有 11 - 11/4 = 9个字符*/21         22     for (int i = 0; i < cc; i++)/*对整个字符串进行扫描, 此时包括了‘-‘,注意这里是小写的cc,即原字符串*/23     {24         if (c[i] >= 48 && c[i] <= 57) /*如果是ascll码这个范围的,即对应字符‘0‘到‘9‘*/25         {26             SumC += int(c[i] - 48) * pow(10, numC - 1); /*把传入的字符化成整形數,用SumC来表示.累加, 何为numC - 1,比如123,numC表示3位数,那么该数是10^2的, 所以用10^(numC - 1)次方 */27                                                         28             numC--;//位数减129         }    30     }31 32     if (flag1 == 1) //如果有‘-‘,flag1 变成了1,那么把这个数按负数处理.33     {34         SumC *= -1; //变成 -SumC35     }36     return SumC;//返回处理结果37 }38 39 int main()40 {41     int zhu[100];//限制了测试组数42     int u = 0;//根据输入,测试u组43     char a[14];//因爲範圍是+-10^9,最多有14個字符44     char b[14];45     while (cin >> a >> b)46     {47         zhu[u] = deal(a) + deal(b);/*调用函数,传入数据处理,最后相加,得出结果, 存入数组中,为后面统一输出*/48         u++;49     }50     for (int y = 0; y < u; y++)51     {52         cout << zhu[y] << endl;//输入结束后, 统一输出答案53     }54     return 0;    55 }


运行结果: