zoukankan      html  css  js  c++  java
  • 高精度运算

    包含了 加、减、乘、除(低精

    // sad
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    
    using namespace std;
    
    template<typename _T>
    void read(_T &x)
    {
    	x=0;char s=getchar();int f=1;
    	while('9'<s||s<'0'){f=1;if(s=='-')f=-1;s=getchar();}
    	while('0'<=s&&s<='9'){x=(x<<3)+(x<<1)+s-'0';s=getchar();}
    	x*=f;
    }
    int n,m,k,p;
    char c[10005];
    
    struct bignum{
    	int z[90005];
    	int cnt;
    	
    	void init()
    	{
    		memset(z,0,sizeof(z));
    		cnt = 0;
    	}
    	
    	void read()
    	{
    		scanf("%s",c+1);
    		
    		cnt = strlen(c+1);
    		if(c[1] == '-')
    		{
    			z[0] = -1;
    			for(int i=1;i<cnt;i++)
    			c[i] = c[i+1];
    			cnt--;
    		}
    		else z[0] = 1; 
    		
    		for(int i=1;i<=cnt;i++)
    		{
    			z[cnt - i + 1] = c[i]-'0';
    		}
    		
    	}
    	
    	void print()
    	{
    		if(z[0] == -1) putchar('-');
    		for(int i=cnt;i>=1;i--)
    		putchar('0'+z[i]);
    	}
    };
    
    bignum operator+(const bignum &a,const bignum &b)
    {
    	bignum c;
    	c.init();
    	int l1 = a.cnt;
    	int l2 = b.cnt;
    	int itn = max(l1,l2);
    	c.cnt = itn;
    	int x= 0;		
    	for(int i=1;i<=itn ;i++)
    	{
    		c.z[i] = a.z[i] + b.z[i] + x;
    		x = c.z[i]/10;
    		c.z[i] %= 10;
    	}
    	if(x)
    	{
    		c.cnt++;
    		c.z[c.cnt] = x;
    	}	
    	return c;
    }
    
    bignum operator*(const bignum &a,const bignum &b)
    {
    	bignum c;
    	c.init();
    	int l1 = a.cnt;
    	int l2 = b.cnt;
    	c.cnt = l1+l2-1;
    	c.z[0] = a.z[0]*b.z[0];
    	for(int i=1,x= 0;i<=l1;i++,x=0)
    	{
    		
    		for(int j=1;j<=l2;j++)
    		{
    			c.z[i+j-1]+=a.z[i] * b.z[j]+x;
    			x = c.z[i+j-1]/10;
    			c.z[i+j-1]%=10;
    		}
    		if(x)
    		{
    			c.z[i+l2] = x%10;
    			c.cnt = max(c.cnt , i+l2);
    			x/=10;
    		}	
    	}
    	
    	while(!c.z[c.cnt] && c.cnt >1) c.cnt--;
    	return c;
    }
    
    bignum operator/(bignum a , int b)
    {
    	bignum c;
    	c.init();
    	c.cnt = a.cnt;
    	
    	int x=0;
    	
    	for(int i=a.cnt;i>=1;i--)
    	{
    		x = x*10+a.z[i];
    		c.z[i] = x/b;
    		x%=b;
    	}
    	
    	while(c.cnt>1 && !c.z[c.cnt]) c.cnt--;
    	
    	return c;
    }
    
    bool operator<(const bignum &a,const bignum &b)
    {
    	if(a.z[0]*b.z[0]<0)
    	{
    		if(a.z[0] == 1) return 0;
    		else return 1;
    	}
    	else
    	{
    		int key = a.z[0];
    		
    		if(a.cnt > b.cnt) return key>0?0:1;
    		if(a.cnt < b.cnt) return key>0?1:0;
    		
    		for(int i=a.cnt;i>=1;i--)
    		{
    			if(a.z[i] > b.z[i]) return key>0?0:1;
    			if(a.z[i] < b.z[i]) return key>0?1:0;
    		}
    		
    		return 0;
    	}
    }
    
    bignum operator-(const bignum &a , const bignum &b)
    {
    	bignum c;
    	c.init();
    	int l1 = a.cnt;
    	int l2 = b.cnt;
    	
    	c.cnt = max(l1,l2);
    	c.z[0] = (a<b)?-1:1;
    	
    	if(c.z[0] == 1)
    	{
    		int x=0;
    		for(int i=1;i<=l1;i++)
    		{
    			c.z[i] = a.z[i] - b.z[i]-x;
    			if(c.z[i]<0)
    			c.z[i]+=10,x=1;
    			else x= 0;
    		}
    		while(c.cnt>1 && c.z[c.cnt]==0){c.cnt--;}
    	}
    	else
    	{
    		int x=0;
    		for(int i=1;i<=l2;i++)
    		{
    			c.z[i] = b.z[i] - a.z[i]-x;
    			if(c.z[i]<0)
    			c.z[i]+=10,x=1;
    			else x= 0;
    		}
    		while(c.cnt>1 && !c.z[c.cnt]){c.cnt--;}		
    	}
    		
    	return c;
    }
    
    signed main()
    {
    	ios_base::sync_with_stdio(false);
    	cout.tie(NULL);
    	cin.tie(NULL);
    	
    	bignum a;
    	int b;
    	
    	a.init();
    	a.read();
    	read(b);
    	bignum c;
    	
    	c.init();
    	c = a/b;
    	
    	c.print();
    	
    
    }
    
  • 相关阅读:
    小程序跳转 H5 时 cookie 值处理问题
    小程序 <web-view></web-view> 中使用 form 表单提交
    React Router 4.x 开发,这些雷区我们都帮你踩过了
    【译】使用 Flutter 实现跨平台移动端开发
    js中的 Date对象 在 IOS 手机中的兼容性问题
    thinkPHP中M()和D()的区别
    thinkphp的select和find的区别
    ThinkPHP3.1快速入门教程
    打开MSSQL 2008 R2的时候,展开数据库都显示以下的错误提示: 值不能为空。参数名viewinfo(microsoft.sqlserver.management.sqlstudio.explorer)
    原型模式(Prototype Pattern)
  • 原文地址:https://www.cnblogs.com/-Iris-/p/14054068.html
Copyright © 2011-2022 走看看