题目1003: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
- 来源:
- 2010年浙江大学计算机及软件工程研究生机试真题
- 答疑:
- 解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobdu.com/thread-7727-1-1.html
- 使用大数相加方法如下(本题目也可以使用简单的转化成整形数字然后相加方法,不必像大数相加这么繁琐):
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>using std::swap;
using std::max;char sa[20];
char sb[20]; char sc[20];
int a[10]; int b[10]; int c[10];int StingToInt(char a[], int b[], int& sign)
{int i;int j;if (a[0] == '-'){sign = -1;j = 0;}else{sign = 1; b[0] = a[0] - '0'; j = 1;}for (i = 1; a[i]; i++){if (a[i] != ','){b[j] = a[i] - '0';j++;}}i = 0;int k = j - 1;while (i < k){swap(b[i], b[k]);i++;k--;}return j;
}void IntToString(int a[], int length, int sign, char b[])
{int i, j;if (sign == 1) { j = 0; }else { b[0] = '-'; j = 1; }for (i = length - 1; i >= 0;i--, j++){b[j] = a[i] + '0';}b[j] = '\0';
}int
Compare(int a[], int lengthA, int b[], int lengthB)
{if (lengthA > lengthB) return 1;if (lengthA < lengthB) return -1;int i;for (i = lengthA - 1; (i >= 0) && (a[i] == b[i]); i--);if (i >= 0){if (a[i] > b[i]){return 1;}else{return -1;}}else{return 0;}
}// |a| >= |b|
int BigAdd(int a[], int lengthA, int signA, int b[], int lengthB, int signB, int c[], int M)
{bool add = (signA == signB);int length = (lengthA > lengthB) ? lengthA : lengthB;int advance = 0;int i;for (i = 0;i <= length;i++){int valueA = (i < lengthA) ? a[i] : 0;int valueB = (i < lengthB) ? (add ? b[i] : (0 - b[i])) : 0;int value = valueA + valueB + advance;if (add){if (value < M){c[i] = value;advance = 0;}else{c[i] = value - M; advance = 1;}}else{if (value >= 0){c[i] = value;advance = 0;}else{c[i] = value + M; advance = -1;}}}i--;while (i >= 0 && c[i] == 0)i--;return max(i + 1, 1);
}int main()
{while (scanf("%s%s", sa, sb) != EOF){int signA, signB, sign;int lengthA = StingToInt(sa, a, signA);int lengthB = StingToInt(sb, b, signB);int length;if (signA == signB){sign = signA;length = BigAdd(a, lengthA, signA, b, lengthB, signB, c, 10);}else{int compare = Compare(a, lengthA, b, lengthB);switch (compare){case 1:sign = signA;length = BigAdd(a, lengthA, signA, b, lengthB, signB, c, 10);break;case -1:sign = signB;length = BigAdd(b, lengthB, signB, a, lengthA, signA, c, 10);break;case 0:sign = 1;c[0] = 0;length = 1;break;}}IntToString(c, length, sign, sc);printf("%s\n", sc);}return 0;
}/**************************************************************Problem: 1003User: phoenix198425Language: C++Result: AcceptedTime:0 msMemory:1020 kb****************************************************************/
题目1003:A+B 使用大数相加方法解法相关推荐
- JavaScript中大数相加的解法
一.两个大正整数字符串相加 在JavaScript中,数值类型满足不了大数据容量计算,可以用字符串进行操作 1 function add(strNum1, strNum2) { 2 // 将传进来的数 ...
- javascript乘法和加法_JavaScript大数相加相乘的实现方法实例
前言 JavaScript 中的最大安全整数是 2 ^{53} – 1 ,即 9007199254740991,当我们进行超出这个范围的数值计算的时候就无法得到精确的值,而是一个近似值,比如我们计算 ...
- 两个函数式解决大数相加的方法
解决大数相加的方法有很多,网上很容易搜到,下面介绍两种,一种是在网上抄的,一种是自己想的,我将他们都用函数式的方式重写了一遍. 这种是在网上抄的,的确非常简洁 function add(a,b) {l ...
- 大数相乘、大数相加、大数相减Java版本
为什么80%的码农都做不了架构师?>>> 题目:两个非常大的数字相乘(相加,相减) 该题目在java中可以使用BigInteger类中的方法来实现.否则的话可以使用如下方式来实 ...
- hdu A + B Problem II(大数相加,数组实现)
hdu A + B Problem II(大数相加,数组实现) 题目走起 注意最后一个case 不需要换行 下面代码 #include<stdio.h> #include<strin ...
- 组成新数python_大数相加 简单实现 Python 版本
上一次写这种类型的题目 应该还是在读书的时候啦 今天偶然同学问一段python代码是啥意思 看了看 有点长 运行一下 像是大数相加 然后突然个想法 想试下 就写了一小段代码 运行了一下发现结果一样 应 ...
- python进行两个大数相加
python进行两个大数相加:由于int类型32位或64位都有长度限制,超出会内存溢出,无法计算,那么解决方法如下: 思路: 1.将超长数转换成字符串 2.进行长度补零,即让两个要计算的字符串长度一样 ...
- 大数系列之大数相加(ACM通过)(一)
大数相加 概述:本题主要解决HDU 1002的大数相加问题并且成功AC 主要思路 1:定义两个字符数组和两个int型数组,输入字符串数组 2:将两个字符数组的长度用'0'补到一样长 3:倒着存入int ...
- 大数相加c语言思路,大数相加
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include /** * * 定义双向节点 * 数据区为一个整型数字 * **/ struct Node { int number; ...
- c语言大数相加怎么写,大数相加
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include /** * * 定义双向节点 * 数据区为一个整型数字 * **/ struct Node { int number; ...
最新文章
- linux编译mmc驱动,Embeded linux之MMC驱动
- p批处理替换目录下文本中的字符串
- 【Python】读写文件的操作
- mybatis if标签字符串判断
- 智慧工厂用到的技术_CCF VC物联网应用技术专业工作组走进苏宁物流智慧仓储工厂参观学习...
- 头歌(educoder)实训作业题目及答案分享 ——1-1 Java入门 - Java入门基础
- oracle创建PDB数据库
- 手机端App显示jsp页面的注意事项
- OSRM开源地图导航引擎介绍一
- CSDN的会员等级和推荐卡规则
- win10可以上网,但显示小地球的情况(未连接到网络)
- Android Qcom Display学习(一)
- 汇洁集团牵手阿里云,开启内衣服饰企业数字化转型
- 单个应用流量统计实现和核对
- 「脑洞」图片转HTML(支持动画)
- V370 Intel WiFi Link 1000 BGN驱动如何正确安装
- 三相桥式全控整流电路matlab仿真,三相桥式全控整流电路的matlab仿真
- 蓝屏代码000c2_电脑蓝屏怎么办?Win8蓝屏故障0x000000c2的解决方法
- c语言打地鼠窗口设计,基于单片机的打地鼠游戏设计
- Java安全学习笔记--一次对JNDI注入失败的问题排查(手写POC以及rmi)
热门文章
- 解决wordpress用户注册时,点击邮件中的重置密码链接提示“您的密码重设链接无效”
- 一个素数,如果将其反转后仍然是一个素数,我们称这样的素数为反转素数。 例如13是一个素数,反转之后得到的31也是一个素数,那么13和31都是反转素数。
- plsql登录空白框_王者荣耀空白居中以及重复名的教程[含软件]
- python怎么修改默认路径_Python小知识之JupyterLab默认启动路径修改
- 在一起计时器_拥有计时器的四个怪兽,一个从杰克身上拿的,一个差点打死赛罗...
- 用户与系统(unix)
- linux shell 学习时遇到的一些问题([: 11: y: unexpected operator)
- indesign打开黑屏 mac_看完这篇文章,90%的电脑黑屏问题都可以解决了!
- MATLAB--求解矩阵方程
- text无法使用空格 unity_简单的介绍几种在unity中对数据的存储和读档的方法!