当前位置: 代码迷 >> 综合 >> HAUT OJ 1347: Choice的加法 --高进度加法
  详细解决方案

HAUT OJ 1347: Choice的加法 --高进度加法

热度:46   发布时间:2023-12-04 03:25:54.0


问题描述:

冬天越来越冷了,Choice当然不想让大家更凉了,所以她给出两个整数A,B,你只要计算A+B的和就好。

输入:

输入数据有多组。

每组一行输入两个整数A,B

A和B的长度小于1000AB都是非负数)

输出:

输出A+B的结果

样例输入:

1 1
1 2

样例输出:

2
3


原因分析:

高进度算法:

1.首先创两个int数组,以及两个字符串(或者两个char类型数组),int数组初始化,拿数组第一个单元记录 数据长度,并将字符串或者char数组里的数字 单个 存入int数组里(倒着存入)

2.找出 两个数中最大长度,然后+1(只可能加1位,因为进位最多进一位)

   两个数组相加,将  i 单元上的数字分别存进 i  和 i+1 单元里(  a[i+1] =a[i]/10;)

3.剔除前导0,因为之前都是倒着来的,所以要从  len 开始 逐渐减 1



解决方案:

#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
int main(void)
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);string str1,str2;while(cin>>str1>>str2){int a[2000],b[2000],i,j,len;memset(a,0,sizeof(a));memset(b,0,sizeof(b));a[0]=str1.length();b[0]=str2.length();for(i=1;i<=a[0];i++)a[i]=str1[a[0]-i]-'0';for(i=1;i<=b[0];i++)b[i]=str2[b[0]-i]-'0';len=max(a[0],b[0])+1;for(i=1;i<=len;i++){a[i]+=b[i];a[i+1]+=a[i]/10;a[i]%=10;}while(len>1&&a[len]==0)len--;for(i=len;i>=1;i--)cout<<a[i];cout<<endl;}return 0;
}

  相关解决方案