poj 2756 Autumn is a Genius 高精度加减

题意:

求a+b。-10^50000<a,b<32768.

分析:

题目描述很猥琐,其实要用高精度的,用高精度加减模板。

代码:

//poj 2756
//sep9
#include <iostream>
using namespace std;
const int maxN=60000;
char A[maxN],B[maxN];
int L,flag1,flag2,flag3,a[maxN],b[maxN],c[maxN];

void ini()
{
	L=max(strlen(A),strlen(B))+10;
	memset(a,0,sizeof(a));
	memset(b,0,sizeof(b));
	memset(c,0,sizeof(c));
	flag1=0;
	flag2=0;
	flag3=0;
	if(A[0]=='-') flag1=1;
	if(B[0]=='-') flag2=1;
	int i,t;
	for(t=0,i=strlen(A)-1;i>=0&&A[i]>='0'&&A[i]<='9';--i)
		a[t++]=A[i]-'0';
	for(t=0,i=strlen(B)-1;i>=0&&B[i]>='0'&&B[i]<='9';--i)
		b[t++]=B[i]-'0';
}

void add(int x[],int y[])
{
	for(int i=0,p=0;i<=L;++i){
		c[i]=x[i]+y[i]+p;
		p=c[i]/10;
		c[i]=c[i]%10;
	}
}

void sub(int x[],int y[])
{
	for(int i=0,p=0;i<=L;++i){
		c[i]=x[i]-y[i]+p;
		if(c[i]<0){
			c[i]+=10;
			p=-1;
		}else
			p=0;
	}
}

int les(int x[],int y[])
{
	for(int i=L;i>=0;--i)
		if(x[i]!=y[i])
			return x[i]<y[i];
	return 0;
}

int main()
{
	int cases;
	scanf("%d",&cases);
	while(cases--){
		scanf("%s%s",A,B);
		ini();
		if(flag1==0&&flag2==0)
			add(a,b);
		else if(flag1==1&&flag2==1){
			add(a,b);
			flag3=1;
		}else if(flag1==0&&flag2==1){//a-b
			if(les(b,a))
				sub(a,b);
			else{
				sub(b,a);
				flag3=1;
			}
		}else{//b-a
			if(les(b,a)){
				sub(a,b);
				flag3=1;
			}else
				sub(b,a);
		}
		int i,j;
		for(i=L;i>=0;--i)
			if(c[i]>0)
				break;
		if(i<0)
			printf("0\n");
		else{
			if(flag3==1)
				printf("-");
			for(j=i;j>=0;--j)
				printf("%d",c[j]);
			printf("\n");
		}
	}
	return 0;
} 
时间: 2024-10-11 15:53:46

poj 2756 Autumn is a Genius 高精度加减的相关文章

POJ 2756 Autumn is a Genius 使用string的大数加减

本题就是说一个小神童,能计算加减法. 不过题目知识说这个小神童,到底有多神,要我们自己发现. 因为最后给出的数据非常非常巨大,听说接近50k就是超过50000个数位相加,可想而知他多神. 看来题目也是考IQ啊! 如果以为是超级水题,按照一般加减法做,肯定是WA了. 这里给出使用string的加减法运算,因为string是长度可增可减的,所以不管是多少位,只要内存支持,那么本算法都可以支持了.也可以使用vector这些容器.不过string应该更加省点内存. 注意: POJ比较讨厌的就是不支持C+

POJ 2756 Autumn is a Genius 大数加减法

Description Jiajia and Wind have a very cute daughter called Autumn. She is so clever that she can do integer additions when she was just 2 years old! Since a lot of people suspect that Autumn may make mistakes, please write a program to prove that A

在axure中实现商品数量加减效果,原型库网站讲师-金乌 解答同学问

有同学在群里提问,如何使用axure制作商品数量增加减少效果,见GIF图.虽然属于初级教程,但很多同学还是小白新手阶段,所以特地录制了详细的视频讲解,供大家学习参考! 该教程由原型库网站录制http://www.yuanxingku.com转载请注明出处! 在axure中实现商品数量加减效果,原型库网站讲师-金乌 解答同学问,布布扣,bubuko.com

去除input[type=number]最右边的spinners(默认加减符号)

// 去掉input[type=number]默认的加减号 input[type='number'] { -moz-appearance:textfield; } input[type=number]::-webkit-inner-spin-button, input[type=number]::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; } input[type=number]有时会出现默认的加减spinne

DateTime操作,时间范围,加减

DB里边存的是char类型数组的时间,例如20151111 12171220000,现在需要把这个时间加减5s,组成 一个时间范围 然后再写存储过程. 想到的办法就是把这个时间先转换成DateTime,然后DateTime本身有可以做加减的方法.做好之后sql的时候有对应的方法 我的解决方法最后是: DateTime dt = DateTime.ParseExact("20151111 12171220000".substring(0,15),"yyyyMMddHHmmss&

小巧实用的数字加减插件(jquery插件)

自己的第一个jquery插件,规模虽然不大,但是小成就满满,对jquery又有了更进一步的认识. 简单实用的数字加减插件,实现通过加减按钮对文本框内的数字进行增减操作. 效果图: 参数: 默认值.最大值.最小值.增减度. 可单独对每个input设置参数,也可以对所有input统一设置.参考代码在下方: 使用方法: 1.引用css.js文件(记得引用jquery.min.js) 2.前台: 2.1无参数 <input type="text" class="numberTe

矩阵基本操作(加减乘、求逆、转置)

看模板,寻找的最好理解,最好用的矩阵基本操作的模板 #define MAXN 100 #define zero(x) (fabs(x)<1e-10) struct mat { int n,m; double data[MAXN][MAXN]; }; ///矩阵加减乘 int add(mat& c,const mat& a,const mat& b) { int i,j,k; if (a.m!=b.m||a.n!=b.n) return 0; c.n=a.n; c.m=a.m;

shell--日期格式化显示和日期的加减

1. 显示当前日期时间. $ dateMon Jun 2 13:55:47 HKT 2014 2. 按照指定格式显示当前时间(date +format). (1). 显示年月日. $ date "+%Y-%m-%d"2014-06-02 $ date "+%F"2014-06-02 $ date "+%Y/%m/%d"2014/06/02 格式也可以不用引号,但是最好加引号(不然中间有空格的话还得转义!). $ date +%Y/%m/%d 20

Python中的日期的加减如何实现?

本文和大家分享的主要是python中日期加减操作相关内容,一起来看看吧,希望对大家学习python有所帮助. 1. 日期输出格式化 所有日期.时间的api都在datetime模块内. 1. datetime => string now = datetime.datetime.now() now.strftime('%Y-%m-%d %H:%M:%S')#输出2012-03-05 16:26:23.870105 strftime是datetime类的实例方法. 2. string => date