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

    #include<string.h>
    #include<iostream>
    struct bign
    {
    	int d[1000];
    	int len;
    	bign()
    	{
    		memset(d, 0, sizeof(d));
    		len = 0;
    	}
    	bign change(char str[])
    	{
    		bign a;
    		a.len = strlen(str);
    		for (int i = 0; i < a.len; i++)
    		{
    			a.d[i] = str[a.len - i - 1] - '0';
    		}
    		return a;
    	}
    	int compare(bign a, bign b)
    	{
    		if (a.len > b.len) 
    		{
    			return 1;
    		}
    		else if (b.len > a.len)
    		{
    			return -1;
    		}
    		else 
    		{
    			for (int i = a.len-1; i >=0; i--)
    			{
    				if (b.d[i] > a.d[i])
    				{
    					return -1;
    				}
    				if (a.d[i] > b.d[i])
    				{
    					return 1;
    				}
    			}
    			return 0;
    		}
    	}
    	bign add(bign a, bign b)//高精度a+b
    	{
    		bign c;
    		int carry = 0;//进位
    		for (int i = 0; i < a.len || i < b.len; i++)
    		{
    			int temp = a.d[i] + b.d[i] + carry;
    			c.d[c.len++] = temp % 10;
    			carry = temp / 10;
    		}
    		
    		if (carry > 0)
    		{
    			c.d[c.len++] = carry;
    		}
    		return c;
    	}
    	void print(bign a)
    	{
    		for (int i = a.len - 1; i >= 0; i--)
    		{
    			printf("%d", a.d[i]);
    		}
    	}
    	bign sub(bign a, bign b)//高精度a-b
    	{
    		bign c;
    		for (int i = 0; i < a.len || i < b.len; i++)
    		{
    			if (a.d[i] < b.d[i])
    			{
    				a.d[i] += 10;
    				a.d[i + 1] --;
    			}
    			c.d[c.len++] = a.d[i]-b.d[i];
    		}
    		//去除高位的0
    		while (c.len - 1 > 0 && c.d[c.len - 1] == 0)
    		{
    			c.len--;
    		}
    		return c;
    	}
    	bign mul(bign a, int b)//高精度*低精度
    	{
    		bign c;
    		//将b看作一个整体
    		int carry = 0;
    		for (int i = 0; i < a.len; i++)
    		{
    			int temp = a.d[i] * b+carry;
    			carry = temp / 10;
    			c.d[c.len++] = temp % 10;
    		}
    		while (carry != 0)
    		{
    			c.d[c.len++] = carry % 10;
    				carry /= 10;
    		}
    		return c;
    	}
    	bign divide(bign a, int b, int& r)//高精度除法,r为余数
    	{
    		bign c;
    		c.len = a.len;
    		for (int i = a.len - 1; i >= 0; i--)
    		{
    			r = r * 10 + a.d[i];
    			if (r < b) {//不够除
    				c.d[i] = 0;
    			}
    			else {
    				c.d[i] = r / b;
    				r = r % b;
    			}
    		}
    		while (c.len - 1 > 0 && c.d[c.len - 1] == 0)
    		{
    			c.len--;
    		}
    		return c;
    	}
    };
    
  • 相关阅读:
    用电脑给手机安装App
    切换皮肤的实现
    瀑布流的简单实现
    HTML5的实用
    HTML5的特性,发展,及使用
    录音的使用步骤
    支付宝集成步骤
    美团(iPad)顶部界面的简单实现, 及开发时常见bug
    真机调试/打包测试/程序发布/内购的具体操作流程
    IOS 触摸事件的处理
  • 原文地址:https://www.cnblogs.com/code-fun/p/15220280.html
Copyright © 2011-2022 走看看