当前位置: 代码迷 >> 综合 >> 洛谷 P1601A+BProblem(高精)高精度加法
  详细解决方案

洛谷 P1601A+BProblem(高精)高精度加法

热度:20   发布时间:2023-12-29 17:39:05.0

题目背景

题目描述

高精度加法,x相当于a+b problem,[b][color=red]不用考虑负数[/color][/b]

输入输出格式

输入格式:

分两行输入a,b<=10^500

输出格式:

输出只有一行,代表A+B的值

输入输出样例

输入样例#1: 复制
1
1




思路:模拟加法运算 用数组存取每一位的值 最后处理进位即可

#include <bits/stdc++.h>
#include <memory.h>
#define N 1000
using namespace std;
int main()
{int a[N], b[N], c[N], star_a, star_b;memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));string s_a, s_b;//开始时用string接受长数字 然后将其转为int数字 cin >> s_a >> s_b;star_a = N - s_a.length(), star_b = N - s_b.length();for(int i = star_a, j =0; i<N; i++, j++)//转化 a[i] = s_a[j] - '0';for(int i = star_b, j = 0; i<N; i++, j++)//转化 b[i] = s_b[j] - '0';int star = min(star_a,star_b);//取较大的那个数字的开头为开始  for(int i = star; i<N; i++)//模拟加法运算 c[i] = a[i] + b[i];int tmp = 0;for(int i = N-1; i>=star; i--)//处理进位 {c[i] += tmp;tmp = c[i]/10;c[i] %= 10;}c[star-1] = tmp;if(c[star-1] != 0)//进行输出 cout<<c[star-1];for(int i = star; i<N; i++)//输出 cout<<c[i];return 0;
}