zoukankan      html  css  js  c++  java
  • 大整数求和

    前言

    如果整数过大如何求值,比如说"4654564646547897891", "12315456456454564"

    这时候常规整数装不下!

    代码

    方案一:

    public static string bigNumberSum(string bigNumberA, string bigNumberB)
    {
    	int maxLength = bigNumberA.Length > bigNumberB.Length ? bigNumberA.Length : bigNumberB.Length;
    	int[] arrayA = new int[maxLength+1];
    	for (var i = 0; i < maxLength+1; i++)
    	{
    		if (bigNumberA.Length - 1 - i >= 0)
    		{
    			arrayA[i] = bigNumberA[bigNumberA.Length - 1 - i] - '0';
    		}
    		else
    		{
    			arrayA[i] = 0;
    		}
    	   
    	}
    	int[] arrayB = new int[maxLength+1];
    	for (var i = 0; i < maxLength+1; i++)
    	{
    		if (bigNumberB.Length - 1 - i >= 0)
    		{
    			arrayB[i] = bigNumberB[bigNumberB.Length - 1 - i] - '0';
    		}
    		else
    		{
    			arrayB[i] = 0;
    		}
    	}
    	int[] result = new int[maxLength+1];
    	for (var i = 0; i < maxLength; i++)
    	{
    		var temp = result[i];
    		temp = temp + arrayA[i] + arrayB[i];
    		if (temp>10)
    		{
    			temp = temp - 10;
    			result[i + 1] = 1;
    		}
    		result[i] = temp;
    	}
    	var hasup = 1;
    	if (result[maxLength] == 1)
    	{
    		hasup = 0;
    	}
    	StringBuilder sb = new StringBuilder();
    	for (var i = result.Length-1- hasup; i >=0; i--)
    	{
    		sb.Append(result[i]);
    	}
    	return sb.ToString();
    }
    
    static void Main(string[] args)
    {
    	Console.WriteLine(bigNumberSum("465456464654789789", "12315456456454564"));
    	Console.ReadKey();
    }
    

    优化方案二:
    九个一组:

    public static string bigNumberSum(string bigNumberA, string bigNumberB)
    {
    	int maxLength = bigNumberA.Length > bigNumberB.Length ? bigNumberA.Length : bigNumberB.Length;
    	var length =Convert.ToInt32(Math.Ceiling(Convert.ToDouble(maxLength) / 9));
    	int[] arrayA = new int[length];
    	for (var i = 0; i < length; i++)
    	{
    		if (i * 9 + 9 > bigNumberA.Length)
    		{
    			if (i * 9 <= bigNumberA.Length-1)
    			{
    				arrayA[i] = Convert.ToInt32(bigNumberA.Substring(bigNumberA.Length - 1 - 9 * i-(bigNumberA.Length - i * 9)+1, bigNumberA.Length - i * 9));
    			}
    			else
    			{
    				arrayA[i] = 0;
    			}
    		}
    		else
    		{
    			arrayA[i] = Convert.ToInt32(bigNumberA.Substring(bigNumberA.Length - 1 - 9 * i-9+1, 9));
    		}
    	}
    	int[] arrayB = new int[length];
    	for (var i = 0; i < length; i ++)
    	{
    		if (i * 9 + 9 > bigNumberB.Length)
    		{
    			if (i * 9 <= bigNumberB.Length - 1)
    			{
    				arrayB[i] = Convert.ToInt32(bigNumberB.Substring(bigNumberB.Length - 1 - 9 * i-(bigNumberB.Length - i * 9)+1, bigNumberB.Length - i * 9));
    			}
    			else
    			{
    				arrayB[i] = 0;
    			}
    		}
    		else
    		{
    			arrayB[i] = Convert.ToInt32(bigNumberB.Substring(bigNumberB.Length-1-9*i-9+1, 9));
    		}
    	}
    	int[] result = new int[length];
    	for (var i = 0; i < length; i++)
    	{
    		result[i] =  arrayA[i] + arrayB[i];
    	}
    	StringBuilder sb = new StringBuilder();
    	for (var i = result.Length-1; i >=0; i--)
    	{
    		sb.Append(result[i]);
    	}
    	return sb.ToString();
    }
    
    static void Main(string[] args)
    {
    	Console.WriteLine(bigNumberSum("4654564646547897891", "12315456456454564"));
    	Console.ReadKey();
    }
    }
    
  • 相关阅读:
    redis 批量删除key
    控制台直接执行sql语句
    item2 快捷键
    mac mamp环境 PHP命令行反应缓慢解决
    composer gitlab 搭建私包
    PostgreSql命令
    maven 程序包com.sun.image.codec.jpeg
    lumen配置日志daily模式
    PHPStorm怎么修改选中的背景颜色呢?
    vim 配置文件.vimrc,高亮+自动缩进+行号+折叠+优化
  • 原文地址:https://www.cnblogs.com/aoximin/p/12553408.html
Copyright © 2011-2022 走看看