wikioi 3116 高精度练习之加法
题目描述 Description给出两个正整数A和B,计算A+B的值。保证A和B的位数不超过500位。
输入描述 Input Description
读入两个用空格隔开的正整数
输出描述 Output Description
输出A+B的值
样例输入 Sample Input
3 12
样例输出 Sample Output
15
数据范围及提示 Data Size & Hint
两个正整数的位数不超过500位
下面三种方法有细微的差别:
第一种方法:顺序读入字符串:
[cpp]
#include <iostream>
#include <string>
#include <sstream>
#include <cstring>
using namespace std;
int main()
{
char a[501],b[501],c[502];
memset(a, '0', sizeof(a));
memset(b, '0', sizeof(b));
memset(c, '0', sizeof(c));
cin >> a >> b;
int aLen = 0;
int bLen = 0;
for(int k=0; k<501; k++)
{
if(a[k]=='\0')
{
aLen = k;
break;
}
}
for(int k=0; k<501; k++)
{
if(b[k]=='\0')
{
bLen = k;
break;
}
}
int i=aLen-1, j=bLen-1, k=501;
int carry = 0;
while(i>=0 && j>=0)
{
int cc = (a[i]-'0')+(b[j]-'0')+carry;
carry = cc/10;
cc%=10;
c[k] = cc+'0';
i--;
j--;
k--;
}
while(i>=0)
{
int cc = (a[i]-'0')+carry;
carry = cc/10;
cc%=10;
c[k] = cc+'0';
i--;
k--;
}
while(j>=0)
{
int cc = (b[j]-'0')+carry;
carry = cc/10;
cc%=10;
c[k] = cc+'0';
j--;
k--;
}
if(carry > 0) c[k] = carry;
for(j=0; j<502; j++)
if(c[j]-'0' > 0) break;
for(; j<502; j++)
cout << c[j];
}
第二种方法:逆序字符串:
[cpp]
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char x[555],y[555];
int a[555]={0},b[555]={0},c[555]={0};
cin >> x >> y;
int len_x = strlen(x);
int len_y = strlen(y);
for(int k=0; k<len_x; k++)
{
a[k]=x[len_x-1-k]-'0';
}
for(int k=0; k<len_y; k++)
{
b[k]=y[len_y-1-k]-'0';
}
int len_max = len_x>len_y?len_x:len_y;
int carry = 0;
for(int i=0; i<len_max; i++)
{
c[i]=(a[i]+b[i]+carry)%10;
carry=(a[i]+b[i]+carry)/10;
}
if(carry > 0) c[len_max] = carry;
if(c[len_max]==1) cout << 1;
for(int i=len_max-1; i>=0; i--) cout << c[i];
return 0;
}
第三种方法:进位操作分离:
[cpp]
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char x[555],y[555];
int a[555]={0},b[555]={0},c[555]={0};
cin >> x >> y;
int len_x = strlen(x);
int len_y = strlen(y);
for(int k=0; k<len_x; k++)
{
a[k]=x[len_x-1-k]-'0';
}
for(int k=0; k<len_y; k++)
{
b[k]=y[len_y-1-k]-'0';
}
int len_max = len_x>len_y?len_x:len_y;
for(int i=0; i<len_max; i++)
{
c[i]=a[i]+b[i];
}
for(int i=0; i<len_max; i++)
{
if(c[i]>=10)
{
c[i+1]++;
c[i] -= 10;
}
}
if(c[len_max]==1) cout << 1;
for(int i=len_max-1; i>=0; i--) cout << c[i];
return 0;
}
补充:软件开发 , C++ ,