码迷,mamicode.com
首页 > 其他好文 > 详细

(ACM_JD)题目1003:A+B

时间:2014-08-07 00:21:17      阅读:473      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   数据   for   

此题不仅仅是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--;//位数减1
29         }    
30     }
31 
32     if (flag1 == 1) //如果有‘-‘,flag1 变成了1,那么把这个数按负数处理.
33     {
34         SumC *= -1; //变成 -SumC
35     }
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 }


运行结果:

bubuko.com,布布扣

 

(ACM_JD)题目1003:A+B,布布扣,bubuko.com

(ACM_JD)题目1003:A+B

标签:style   blog   http   color   os   io   数据   for   

原文地址:http://www.cnblogs.com/hlwyfeng/p/3895954.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!