1168:大整数加法
P1601 A+B Problem(高精)
1.6编程基础之一维数组 10:大整数加法
C++参考代码一:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <bits/stdc++.h>
using namespace std;
int main( void )
{
//char a1[300],b1[300];
string a1,b1;
int a[300],b[300],c[300],lena,lenb,lenc,i,x;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
//输入加数与被加数
//gets(a1);
//gets(b1);
cin>>a1;
cin>>b1;
lena=a1.length();
lenb=b1.length();
//将输入字符串倒置
//加数放入a数组
for (i=0;i<=lena-1;i++) a[lena-i]=a1[i]-48;
/*
//加数放入a数组
for (i=0;i<=lena-1;i++) a[lena-i]=a1[i]-'0';
*/
//加数放入b数组
for (i=0;i<=lenb-1;i++) b[lenb-i]=b1[i]-48;
lenc =1;
x=0;
while ( lenc <=lena || lenc <=lenb )
{
//两数相加
c[lenc]=a[lenc]+b[lenc]+x;
x=c[lenc]/10;
c[lenc]%=10;
lenc++;
}
c[lenc]=x;
//去掉多余的0
while(c[lenc]==0 && lenc>1)
{
lenc--;
}
/*
//处理最高进位
if (c[lenc]==0)
lenc--;
*/
//输出结果
for (i=lenc;i>=1;i--)
cout<<c[i];
cout<<endl;
return 0;
}
C++参考代码二:
//program p5_1
/*
第1课 加法天才(add)-有前导0
指针常量和常量指针的区别
https://www.cnblogs.com/hsy1941/p/10506758.html
*/
#include <bits/stdc++.h>
using namespace std;
int lena,lenb,lenc;
const int maxL=200;
int a[maxL],b[maxL],c[maxL];
void add(int a[],int lena,int b[],int lenb,int c[],int &lenc) //形参 定义
{
memset(c,0,sizeof(c)); //快
lenc=max(lena,lenb);
for(int i=0;i<lenc;++i)
{
c[i]+=a[i]+b[i];
if(c[i]>=10)
{
//向前进1位
++c[i+1];
//当前的位置要减去进位的10
c[i]-=10;
}
}
//最高位向前进1位
if( c[lenc] )
{
//运算结果的长度增1
++lenc;
}
//去掉多余的前导0 如果只有一个0,则无需去掉
while(c[lenc-1]==0 && lenc>1)
{
lenc--;
}
}
int main( void )
{
/*
856
255
*/
string s;
cin>>s;
lena=s.length();
//倒着存
for(int i=0;i<lena;i++)
{
a[i]=s[lena-1-i]-'0';
//658
}
//输入第2个数
cin>>s;
lenb=s.length();
//倒着存
for(int i=0;i<lenb;i++)
{
//s[lenb-1-i]-'0' 将字符串转为数字
b[i]=s[lenb-1-i]-'0';
}
//552
//高精函数
add(a,lena,b,lenb,c,lenc);//实参
//输出的时候倒着输出
for(int i=lenc-1;i>=0;--i)
{
cout<<c[i];
}
cout<<endl;
return 0;
}
/*
【输入样例】
8569742356145896
215783669444444427
【输出样例】
224353411800590323
*/