题目名称 37. 增强的加法问题
输入输出 add.in/out
难度等级
时间限制 1000 ms (1 s)
内存限制 128 MiB
测试数据 10
题目来源 GravatarIM_ask 于2008-07-06加入
开放分组 全部用户
提交状态
分类标签
基本 高精度
查看题解 分享题解
通过:1095, 提交:2339, 通过率:46.81%
GravatarTA 100 0.000 s 0.00 MiB Pascal
Gravatartest 100 0.000 s 0.00 MiB C++
GravatarLOSER 100 0.000 s 0.00 MiB C++
GravatarBACK 100 0.000 s 0.00 MiB C++
Gravatarjxy_1999 100 0.000 s 0.00 MiB Pascal
GravatarGo灬Fire 100 0.000 s 0.00 MiB C++
Gravatar派特三石 100 0.000 s 0.00 MiB C++
Gravatar金身人面兽 100 0.000 s 0.00 MiB C++
Gravatar_Itachi 100 0.000 s 0.00 MiB C++
Gravatar520 100 0.000 s 0.00 MiB C++
本题关联比赛
基本练习
NOIP2015普及组练习
关于 增强的加法问题 的近10条评论(全部评论)
本蒟蒻不会加法,hhh
Gravatar牛先生
2021-10-28 18:24 33楼
程序真水
Gravatar夜莺
2019-12-12 21:39 32楼
ac答案
#include<bits/stdc++.h>
using namespace std;
int main(){
freopen("add.in","r",stdin);
freopen("add.out","w",stdout);
char a[111],b[111];
int a1[111],b1[111],c1[111],lena,lenb,lenc,x;
memset(a1,0,sizeof(a1));
memset(b1,0,sizeof(b1));
memset(c1,0,sizeof(c1));
gets(a);
gets(b);
lena=strlen(a);
lenb=strlen(b);
for (int i=0;i<lena;i++)
{
a1[lena-i]=a[i]-48;
}
for(int i=0;i<lenb;i++)
{
b1[lenb-i]=b[i]-48;
}
lenc=1;
x=0;
while(lenc<=lena||lenc<=lenb)
{
c1[lenc]=a1[lenc]+b1[lenc]+x;
x=c1[lenc]/10;
c1[lenc]%=10;
lenc++;
}
c1[lenc]=x;
if(c1[lenc]==0)
{
lenc--;
}
for(int i=lenc;i>=1;i--)
{
cout<<c1[i];
}
cout<<endl;
}
Gravatareeeee
2018-07-01 20:42 31楼
边界的进位.gif
Gravatarsnake
2017-11-02 09:47 30楼
这道题Pascal有两种算法过,一种是新建Boolean判定进位,第二种思想与前一种相似但是个人感觉更精简,不过思路也更难(zhi)想(zhang)。如下:
Program cogs;
Var
Cal:array[1..256] of char;
a,b:string;
carry:boolean;
c:integer;
Procedure
Plus(m,n:string);
Var
i,j,k,sum:integer;
Begin
i:=length(m);
j:=length(n);
k:=0;
carry:=false;
while (i>=1) or (j>=1) do
begin
k:=k+1;
if i>=1 then
begin
sum:=ord(m[i])-48;
i:=i-1;
end
else sum:=0;
if j>=1 then
begin
sum:=sum+ord(n[j])-48;
j:=j-1;
end;
if carry then
sum:=sum+1;
if sum>9 then
begin
carry:=true;
Cal[k]:=chr(sum-10+48);
end
else begin
carry:=false;
Cal[k]:=chr(sum+48);
end;
end;
if carry then
begin
k:=k+1;
Cal[k]:='1';
end;
while k>=1 do
begin
write(Cal[k]);
k:=k-1;
end;
end;
Begin
assign(input,'add.in');
assign(output,'add.out');
reset(input);
rewrite(output);
readln(a);
readln(b);
Plus(a,b);
close(input);
close(output)
end.

或者是
Program high_acplus;
Var
a:array[1..150] of integer;
i,j:integer;
s1,s2,s3:string;
begin
for i:=1 to 150 do
a[i]:=0;
assign(input,'add.in');
assign(output,'add.out');
reset(input);
rewrite(output);
readln(s1);
readln(s2);
if(length(s1)<length(s2))or((length(s1)=length(s2))and(s1<s2)) then
begin
s3:=s1;
s1:=s2;
s2:=s3;
end;
for i:=1 to length(s1) do
a[i]:=ord(s1[length(s1)-i+1])-ord('0');
for j:=1 to length(s2) do
a[j]:=a[j]+(ord(s2[length(s2)-j+1])-ord('0'));
for j:=1 to length(s1) do
if (a[j]>=10) then
begin
a[j]:=a[j] mod 10;
a[j+1]:=a[j+1]+1;
end;
if (a[length(s1)+1]<>0) then
for i:=(length(s1)+1) downto 1 do
write(a[i])
else
for i:=(length(s1)) downto 1 do
write(a[i]);
close(input);
close(output)
end.
Gravatardelta_saberlover
2017-08-18 23:44 29楼
记得清零初值,清零,清零,清零!!!!!!!!!!!!!!!!!!!!!!!!!!
GravatarNBWang
2017-02-16 13:18 28楼
一晚上手写大整数封装,加减乘除大小等加上取模,不要白不要
GravatarHzoi_Go灬Fire
2016-10-31 21:30 27楼
呵呵
Gravatar不会起名怪我咯
2016-07-07 09:54 26楼
Gravatar加藤惠
2016-07-07 08:40 25楼
memset用时要加#include《string.h》
Gravatar瑆の時間~無盡輪迴·林蔭
2016-07-06 10:33 24楼

37. 增强的加法问题

★   输入文件:add.in   输出文件:add.out   简单对比
时间限制:1 s   内存限制:128 MiB

【题目描述】

输入两个整数,输出它们的和。

【输入格式】

输入文件只有两行,第一行一个整数$x$,第二行一个整数$y$。其中$0\leq x\leq 10^{100}, 0\leq y\leq 10^{100}$。

【输出格式】

输出文件有1行,为两个数的和。

【输入样例】

123456789
123456789123456789

【输出样例】

123456789246913578