【NEUQACM OJ】1018: A+B again

1018: A+B again

题目描述

谷学长有一个非常简单的问题给你,给你两个整数A和B,你的任务是计算A+B。

输入

输入的第一行包含一个整数T(T<=20)表示测试实例的个数,然后2*T行,分别表示A和B两个正整数。注意整数非常大,那意味着你不能用32位整数来处理。你可以确定的是整数的长度不超过1000。

输出

对于每一个样例,你应该输出两行,第一行是"Case #:",#表示第几个样例,第二行是一个等式"A+B=Sum",Sum表示A+B的结果。注意等式中有空格。

样例输入

2
1
2
112233445566778899
998877665544332211

样例输出

Case 1:
1 + 2 = 3
Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110

提示

大数加法问题,在大数运算里面相对还算简单,不过对初学者博主来说,思路清晰,不过写代码能力明显就有点跟不上了。

下面我们来分析下吧:

前面的Case什么的只要把相应已知数据输出即可,下面我们重点来分析下加法的结果

首先我们看他的输入,是连续输入,即这个大数字各个位之间是没有空格的,这就意味着用整型的数组难以实现数据的输入问题。因此我们考虑用字符型数组解决输入问题。

这里方便起见;我们输入字符数组a为“98”,b为“9”  来分析下思路。

原理就是模拟小学加法,要做加法,首先每位数字应对齐,才可对应相加。因此,我们考虑定义字符数组 char c[1001]来转移并对齐a,b中的元素;

cin>>a;  "98"

代码如下:

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4
 5 char a[1001],b[1001];
 6
 7 void Add()//字符加法
 8 {
 9
10     char c[1001];
11     memset(c,‘0‘,1001);
12     for(int i=0;i<strlen(a);i++)//对齐
13     {
14         c[i]=a[strlen(a)-1-i];
15     }
16
17
18     memset(a,‘0‘,1001);
19     for(int i=0;i<strlen(b);i++)
20     {
21         a[i]=b[strlen(b)-1-i];
22     }
23
24     for(int i=0;i<1000;i++)
25     {
26         a[i]+=c[i]-‘0‘;
27         if(a[i]>‘9‘)
28         {
29             a[i]-=10;
30             a[i+1]++;
31         }
32     }
33
34 }
35
36
37 int main()
38 {
39     int T,n=0;
40     cin>>T;
41     while(T--)
42   {
43       n++;
44     memset(a,‘0‘,1001);
45     memset(b,‘0‘,1001);
46
47     cin>>a>>b;
48
49     cout<<"Case "<<n<<":"<<endl;
50     cout<<a<<" + "<<b<<" = ";
51
52
53     Add();
54
55     int k;
56     for(k=1000;k>=0;k--)//排前导0
57     {
58         if(a[k]!=‘0‘)
59         {break;}
60     }
61     for(int i=k;i>=0;i--)
62     {
63         cout<<a[i];
64     }
65     cout<<endl;
66    }
67     return 0;
68  } 
时间: 2024-10-25 19:15:02

【NEUQACM OJ】1018: A+B again的相关文章

【NEUQACM OJ】1017: 平面切割(特别版)

1017: 平面切割(特别版) 题目描述 我们要求的是n条闪电型折线分割平面的最大数目.比如,一条闪电型折线可以将平面分成两部分,两条最多可以将平面分成12部分,三条最多可将平面分成31部分,四条最多则可将一个平面分为59部分. 输入 输入数据的第一行是一个整数C,表示测试实例的个数,然后是C 行数据,每行包含一个整数n(0<n<=10000),表示折线的数量. 输出 对于每个测试实例,请输出平面的最大分割数,每个实例的输出占一行. 样例输入 3 1 2 3 样例输出 2 12 31 提示 注

【华为OJ】201301 JAVA 题目0-1级 将数组分为相等的两组

描述:  编写一个函数,传入一个int型数组,返回该数组能否分成两组,使得两组中各元素加起来的和相等,并且,所有5的倍数必须在其中一个组中,所有3的倍数在另一个组中(不包括5的倍数),能满足以上条件,返回true:不满足时返回false. 知识点: 语言基础,字符串,循环,函数,指针,枚举,位运算,结构体,联合体,文件操作,递归    题目来源: 内部整理  练习阶段: 初级  运行时间限制: 10Sec 内存限制: 128MByte 输入: 输入输入的数据个数 输入一个int型数组 输出: 返

【华为OJ】【044-超长正整数相加】

[华为OJ][算法总篇章] [华为OJ][044-超长正整数相加] [工程下载] 题目描述 请设计一个算法完成两个超长正整数的加法. 接口说明 /** * 请设计一个算法完成两个超长正整数的加法. * 输入参数: * String addend:加数 * String augend:被加数 * 返回值:加法结果 */ public String addLongInteger(String addend, String augend) { /*在这里实现功能*/ return null; } 输入

【LeetCode OJ】Sum Root to Leaf Numbers

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 # Definition for a  binary tree node # class TreeNode: #     def __init__(self, x): #         self.val = x #         self.left = No

【LeetCode OJ】Longest Consecutive Sequence

Problem Link: http://oj.leetcode.com/problems/longest-consecutive-sequence/ This problem is a classical problem where we can reduce the running time by the help of hash table. By given a list of numbers, we can find the longest consecutive sequence b

【华为OJ】【094-多线程】

[华为OJ][算法总篇章] [华为OJ][094-多线程] [工程下载] 题目描述 问题描述:有4个线程和1个公共的字符数组.线程1的功能就是向数组输出A,线程2的功能就是向字符输出B, 线程3的功能就是向数组输出C,线程4的功能就是向数组输出D.要求按顺序向数组赋值ABCDABCDABCD, ABCD的个数由线程函数1的参数指定. 输入描述: 输入一个int整数 输出描述: 输出多个ABCD 输入例子: 10 输出例子: ABCDABCDABCDABCDABCDABCDABCDABCDABCD

【华为OJ】【092-学英语】

[华为OJ][算法总篇章] [华为OJ][092-学英语] [工程下载] 题目描述 Jessi初学英语,为了快速读出一串数字,编写程序将数字转换成英文: 如22:twenty two,123:one hundred and twenty three. 说明 数字为正整数,长度不超过十位,不考虑小数,转化结果为英文小写: 输出格式为twenty two: 非法数据请返回"error": 关键字提示:and,billion,million,thousand,hundred. 方法原型:pu

【华为OJ】【091-数据分类处理】

[华为OJ][算法总篇章] [华为OJ][091-数据分类处理] [工程下载] 题目描述 信息社会,有海量的数据需要分析处理,比如公安局分析身份证号码.QQ用户.手机号码.银行帐号等信息及活动记录. 采集输入大数据和分类规则,通过大数据分类处理程序,将大数据分类输出. 输入描述: ?一组输入整数序列I和一组规则整数序列R,I和R序列的第一个整数为序列的个数(个数不包含第一个整数):整数范围为0~0xFFFFFFFF,序列个数不限 输出描述: ?从R依次中取出R<i>,对I进行处理,找到满足条件

【华为OJ】【082-字符串通配符】

[华为OJ][算法总篇章] [华为OJ][082-字符串通配符] [工程下载] 题目描述 问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索.数据库.正则表达式等领域.现要求各位实现字符串通配符的算法. 要求: 实现如下2个通配符: *:匹配0个或以上的字符(字符由英文字母和数字0-9组成,不区分大小写.下同) ?:匹配1个字符 输入描述 通配符表达式: 一组字符串. 输出描述 返回匹配的结果,正确输出true,错误输出false 输入例子 先输入一个带有通配符的字符串,再输入一个需要