P1601 A+B Problem(高精)

217 阅读1分钟

题目背景


题目描述

高精度加法,相当于a+b problem,不用考虑负数.
输入格式

分两行输入。a,b<=10500a,b<=10^{500}a,b<=10500
输出格式

输出只有一行,代表a+ba+ba+b的值
输入输出样例
输入 #1

1
1

输出 #1

2
思路:高精度算法~~,普通的数据类型已经不能满足他了,就我所学的~~所以这里我们需要用数组来储存每个数,值得注意的是,当数组中某个元素>=10的时候 需要进位

附代码

#include<stdio.h>
#include<string.h>
int main()
{	
	char str1[22222],str2[22222];
	int begin[20000],end[22222];
	memset(str1,0,sizeof(str1));//初始化数组
	memset(str2,0,sizeof(str2));
	memset(begin,0,sizeof(begin));
	memset(end,0,sizeof(end));
	int i,j,k;
	int len1,len2;
	scanf("%s%s",str1,str2);
	len1=strlen(str1);
	len2=strlen(str2);
	int max;
	max=(len1>len2?len1:len2);//比较数组长度的大小
	for(j=0,i=len1-1;i>=0;j++,i--)
	{
		begin[j]=str1[i]-'0';//将数组字符串转换为数字
		
	}

	for(j=0,i=len2-1;i>=0;j++,i--)
	{
		end[j]=str2[i]-'0';

	}
	for(i=0;i<max;i++)
	{
		end[i]+=begin[i];
		if(end[i]>=10)
		{
			end[i]%=10;
			end[i+1]++;//进位
		}
	}
	if(end[max]!=0)
		printf("1");
	for(i=max-1;i>=0;i--)
	{
		printf("%d",end[i]);
	}
	printf("\n");
	return 0;
}