概述
A + B problem
Description
Calculate A + B.
Input
Each line will contain two integers A and B. Process to end of file. (EOF)
Output
For each case, output A + B in one line.
Sample Input 1
2 3
4 5
Sample Output 1
5
9
思路:
调皮的毛学姐又整出一道很坑的题,开始我以为就是简单的a+b,在 WA 3次后我意识到这题的数据有很大的bug,大到long long都呈不下,所以这种情况只能用数组模拟求和的方法来做。代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
char a[1000],b[1000];
int c[1000],d[1000],i;
while(scanf("%s%s",&a,&b)!=EOF)
{
memset(c,0,sizeof(c));//将数组初始化为0
memset(d,0,sizeof(d));
for(i=0;i<strlen(a);i++)
c[i]=a[strlen(a)-1-i]-'0';//将数据倒序输入一个新的数组
for(i=0;i<strlen(b);i++)
d[i]=b[strlen(b)-1-i]-'0';
for(i=0;i<(strlen(a)>strlen(b)?strlen(a):strlen(b));i++)//模拟求和
c[i+1]+=(c[i]+d[i])/10,c[i]=(c[i]+d[i])%10;
if(c[i])for(int j=i;j>=0;j--)//排除数据开头为0的情况,即有没有进位
printf("%d",c[j]);
else for(int j=i-1;j>=0;j--)
printf("%d",c[j]);
printf("n");
}
return 0;
}
用vector的方法
#include<iostream>
#include<vector>
using namespace std;
const int N = 1e6 + 10;
string s1, s2;
vector<int> a, b, c;
vector<int> add(vector<int> a, vector<int> b)
{
if(a.size() < b.size())return add(b, a);
vector<int > c;
int t = 0;
for(int i = 0; i < a.size(); i++)
{
t += a[i];
if(i < b.size())t += b[i];
c.push_back(t % 10);
t /= 10;
}
if(t)c.push_back(t);
return c;
}
int main()
{
cin >> s1 >> s2;
int len1 = s1.size(), len2 = s2.size();
for(int i = len1 -1; i >= 0; i--)
a.push_back(s1[i] - '0');
for(int i = len2 - 1; i >= 0; i--)
b.push_back(s2[i] - '0');
a = add(a, b);
for(int i = a.size() - 1; i >= 0; i--)
cout << a[i];
cout << endl;
return 0;
}
最后
以上就是生动苗条为你收集整理的数组模拟加法(每日一练 11.30)A + B problem的全部内容,希望文章能够帮你解决数组模拟加法(每日一练 11.30)A + B problem所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复