【大数加法】POJ-1503、NYOJ-103
1503:Integer Inquiry
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
- One of the first users of BIT's new supercomputer was Chip Diller. He extended his exploration of powers of 3 to go from 0 to 333 and he explored taking various sums of those numbers.
``This supercomputer is great,'' remarked Chip. ``I only wish Timothy were here to see these results.'' (Chip moved to a new apartment, once one became available on the third floor of the Lemon Sky apartments on Third Street.) - 输入
- The input will consist of at most 100 lines of text, each of which contains a single VeryLongInteger. Each VeryLongInteger will be 100 or fewer characters in length, and will only contain digits (no VeryLongInteger will be negative).
The final input line will contain a single zero on a line by itself.
- 输出
- Your program should output the sum of the VeryLongIntegers given in the input.
- 样例输入
-
123456789012345678901234567890
123456789012345678901234567890
123456789012345678901234567890
0 - 样例输出
-
370370367037037036703703703670
- 先说说为啥要用算法实现大数加法:
我们来看看数据:
bool型为布尔型,占1个字节,取值0或1。
BOOL型为int型,一般认为占4个字节,取值TRUE/FALSE/ERROR。
sbyte型为有符号8位整数,占1个字节,取值范围在128~127之间。
bytet型为无符号16位整数,占2个字节,取值范围在0~255之间。
short型为有符号16位整数,占2个字节,取值范围在-32,768~32,767之间。
ushort型为无符号16位整数,占2个字节,取值范围在0~65,535之间。
int型为有符号32位整数,占4个字节,取值范围在-2,147,483,648~2,147,483,647之间。
uint型为无符号32位整数,占4个字节,取值范围在0~4,294,967,295之间。
long型为64位有符号整数,占8个字节,取值范围在9,223,372,036,854,775,808~9,223,372,036,854,775,807之间。
ulong型为64位无符号整数,占8个字节,取值范围在0~18,446,744,073,709,551,615之间。
float型为32位单精度实数,占4个字节,取值范围3.4E+10的负38次方~3.4E+10的38次方之间。
double型为64位实数,占8个字节,取值范围1.7E+10的负308次方~1.7E+10的正308次方。
int num1[MAX],num2[MAX];
void Add(char a[],char b[]){
int i,j,len1,len2,max;
memset(num1,,sizeof(num1));
memset(num2,,sizeof(num2));
len1 = strlen(a);
len2 = strlen(b);
//获得最长数组的长度
//两数相加最多不会超过最大数的位数+1,减少循环次数
max = len1 > len2 ? len1 : len2;
//将两字符串数组转换为数字数组
for(i = len1 - ,j = ;i >= ;i--){
num1[j++] = a[i] - '';
}
for(i = len2 - ,j = ;i >= ;i--){
num2[j++] = b[i] - '';
}
//模拟进位运算
for(i = ;i <= max;i++){
num1[i] += num2[i];
if(num1[i] > ){
num1[i] -= ;
num1[i + ] ++;
}
}
//输出
int ac = ;
for(i = max;i >= ;i--){//输出排除0
if(num1[i] != )
ac = ;
if(ac){
printf("%d",num1[i]);
}
}
}
- 感觉学会了,于是乎,就找了题,继续练练手,就是POJ-1503.
- 然后就陷入了深坑中,首先就是那个输入,竟然一直想要用二维数组,真是。。。只能怪练得还太少。
- 解题过程中,脑中想的方法过于复杂,那肯定就是错误的,一定要跳出这个思维,想别的思路解决。
//POJ-1503-1
#include <cstdio>
#include <cstring>
const int MAXN = ;
int main()
{
char s[MAXN];
int i, j;
int m;
scanf("%d",&m);
while(m--){
int sum[MAXN] = {};
while(gets(s))
{
int len = strlen(s);
if(s[] == '' && len == )
break;
//sum[]保存所有组的各位的和
for(i = , j = len-; j >= ; i--, j--)
{
sum[i] += s[j]-'';
}
}
//将sum[]每个元素,进行进位
for(i = ; i > ; i--)
{
sum[i-] += sum[i] / ;
sum[i] %= ;
}
//排除和为0的情况
for(i = ; sum[i] == && i < ; i++)
{
if(i == )//意味着全为零
{
printf("0\n");
}
}
for( ; i < ; i++)
{
printf("%d",sum[i]);
}
printf("\n\n");
}
return ;
}
A+B Problem II
- 描述
-
I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B.
A,B must be positive.
- 输入
- The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line consists of two positive integers, A and B. Notice that the integers are very large, that means you should not process them by using 32-bit integer. You may assume the length of each integer will not exceed 1000.
- 输出
- For each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line is the an equation "A + B = Sum", Sum means the result of A + B. Note there are some spaces int the equation.
- 样例输入
-
2
1 2
112233445566778899 998877665544332211 - 样例输出
-
Case 1:
1 + 2 = 3
Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110
//NYOJ-103
#include<cstdio>
#include<cstring>
const int MAX = ;
char str1[MAX],str2[MAX];
int num1[MAX],num2[MAX];
void Add(char a[],char b[]){
int i,j,len1,len2,max;
memset(num1,,sizeof(num1));
memset(num2,,sizeof(num2));
len1 = strlen(a);
len2 = strlen(b);
//获得最长数组的长度
//两数相加最多不会超过最大数的位数+1,减少循环次数
max = len1 > len2 ? len1 : len2;
//将两字符串数组转换为数字数组
for(i = len1 - ,j = ;i >= ;i--){
num1[j++] = a[i] - '';
}
for(i = len2 - ,j = ;i >= ;i--){
num2[j++] = b[i] - '';
}
//模拟进位运算
for(i = ;i <= max;i++){
num1[i] += num2[i];
if(num1[i] > ){
num1[i] -= ;
num1[i + ] ++;
}
}
//输出
int ac = ;
for(i = max;i >= ;i--){//输出排除0
if(num1[i] != )
ac = ;
if(ac){
printf("%d",num1[i]);
}
}
}
int main(){
int n,i = ;
scanf("%d",&n);
while(n--){
scanf("%s %s",str1,str2);
printf("Case %d:\n%s + %s = ",i,str1,str2);
if(str1[] == '' && str2[] == ''){
printf("0\n");
}else{
Add(str1,str2);
printf("\n");
}
i++;
}
return ;
}
- 减法、乘法、除法明天继续
【大数加法】POJ-1503、NYOJ-103的更多相关文章
- 51nod 1005 大数加法
#include<iostream> #include<string> using namespace std; #define MAXN 10001 },b[MAXN]={} ...
- c#大数加法
在C#中,我们经常需要表示整数.但是,c#的基本数据类型中,最大的long也只能表示-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807之间的数 ...
- 玲珑杯1007-A 八进制大数加法(实现逻辑陷阱与题目套路)
题目连接:http://www.ifrog.cc/acm/problem/1056 DESCRIPTION Two octal number integers a, b are given, and ...
- Leetcode 67 Add Binary 大数加法+字符串处理
题意:两个二进制数相加,大数加法的变形 大数加法流程: 1.倒置两个大数,这一步能使所有大数对齐 2.逐位相加,同时进位 3.倒置两个大数的和作为输出 class Solution { public: ...
- nyoj 103 A + B problem II
点击打开链接 A+B Problem II 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 I have a very simple problem for you. G ...
- HDU1002大数加法
大数加法 c++版: #include <map> #include <set> #include <stack> #include <queue> # ...
- java实现大数加法、乘法(BigDecimal)
之前写过用vector.string实现大数加法,现在用java的BigDecimal类,代码简单很多.但是在online-judge上,java的代码运行时间和内存大得多. java大数加法:求a+ ...
- vector、string实现大数加法乘法
理解 vector 是一个容器,是一个数据集,里边装了很多个元素.与数组最大的不同是 vector 可以动态增长. 用 vector 实现大数运算的关键是,以 string 的方式读入一个大数,然后将 ...
- A + B Problem II 大数加法
题目描述: Input The first line of the input contains an integer T(1<=T<=20) which means the number ...
随机推荐
- jsp的常用指令有哪些(编译指令/动作指令整理)
jsp的常用指令有哪些(编译指令/动作指令整理) JSP动作指令 JSP - JSP中的脚本.指令.动作和注释
- 总结:Unity3D游戏上线后的流程回顾
原地址:http://unity3d.9tech.cn/news/2014/0127/39748.html 首先.unity 灯光烘焙 :Unity 3d FBX模型导入.选项Model 不导入资源球 ...
- Web Server 和 HTTP 协议
https://toutiao.io/posts/xm2fr/preview 一直在找实习,有点什么东西直接就在evernote里面记了,也没时间来更新到这里.找实习真是个蛋疼的事,一直找的是困难模式 ...
- Class
1. No const constructor Unlike other member functions, constructors may not be declared as const . W ...
- Sublime Text 3 搭建 React.js 开发环境
sublime有很强的自定义功能,插件库很庞大,针对新语言插件更新很快,配合使用可以快速搭建适配语言的开发环境. 1. babel 支持ES6, React.js, jsx代码高亮,对 JavaScr ...
- TopCoder 603 div1 & div2
div2 250pts MiddleCode 题意:s串长度为奇数时,将中间字符取掉并添加到t末尾:长度为偶数时,将中间两个较小的字符取掉并添加到末尾. 分析:直接做,学习了一下substr(s, p ...
- Project Euler 83:Path sum: four ways 路径和:4个方向
Path sum: four ways NOTE: This problem is a significantly more challenging version of Problem 81. In ...
- MySQL 建表字段长度的限制
脑补,varchar(N),N指的是最大字符数,不是字节数. 先上测试说明: 在MySQL建表时,遇到一个奇怪的现象: root@localhost : test 10:30:54>CREA ...
- HTML5 编辑 API 之 Range 对象(二)
1.Range.cloneContents()The Range.cloneContents() returns a DocumentFragment copying the objects of t ...
- android bitmap out of memory总结、心得
setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,这些函数在完成decode后,最终都是通过java层的creat ...