zoukankan      html  css  js  c++  java
  • C#实现大数相加

    在C#中,我们经常需要表示整数。但是,c#的基本数据类型中,最大的long也只能表示-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807之间的数。

    如果我们需要表示更大的数,就需要用到一定的算法来完成。

    这次,我给大家分享一下C##的大数运算之加法。

    代码只考虑了正数的整数加法。

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace ConsoleApplication1
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             Console.WriteLine("请输入第一个加数");
    14             string oneNum = Console.ReadLine();
    15             Console.WriteLine("请输入第二个加数");
    16             string twoNum = Console.ReadLine();
    17 
    18             string result = TwoBigNumAdd(oneNum, twoNum);
    19             Console.WriteLine(result);
    20         }
    21 
    22         static string TwoBigNumAdd(string a, string b)
    23         {
    24             int k = 0;
    25             List<int> array = new List<int>();
    26             List<int> one = new List<int>();
    27             List<int> two = new List<int>();
    28 
    29             //将两个数处理成相同长度的字符串,短的小的数字前面补0
    30             for (int i = 0; i < (a.Length > b.Length ? a.Length : b.Length); i++)
    31             {
    32                 if (i >= a.Length)
    33                     one.Insert(i - a.Length, 0);
    34                 else
    35                     one.Add(int.Parse(a[i].ToString()));
    36                 if (i >= b.Length)
    37                     two.Insert(i - b.Length, 0);
    38                 else
    39                     two.Add(int.Parse(b[i].ToString()));
    40             }
    41 
    42             //array集合用于存储相加的和,所以长度最大也只会比最大的数长度长1,刚开始全部存0
    43             for (int i = 0; i <= (a.Length > b.Length ? a.Length : b.Length); i++)
    44             {
    45                 array.Add(0);
    46             }
    47 
    48             //从低位往高位每位开始相加,如果相加 >=10 则进1取余
    49             for (int i = (a.Length > b.Length ? a.Length : b.Length) - 1; i >= 0; i--)
    50             {
    51                 array[i + 1] += (one[i] + two[i]) % 10;
    52                 k = (one[i] + two[i]) / 10;
    53 
    54                 array[i] += k;
    55             }
    56 
    57             //如果首位为0,则移除
    58             if (array[0] == 0)
    59             {
    60                 array.RemoveAt(0);
    61             }
    62 
    63             //将集合转换成字符串返回
    64             StringBuilder result = new StringBuilder();
    65             for (int i = 0; i < array.Count; i++)
    66             {
    67                 result.Append(array[i]);
    68             }
    69             return result.ToString();
    70         }
    71     }
    72 }
  • 相关阅读:
    [UE4]RPC,远程调用
    [UE4]先报告后广播模式
    [UE4]复制引起的重复对象
    [UE4]封装蓝图函数Print String
    [UE4]碰撞的随机性
    [UE4]Authority,网络控制权
    [UE4]Replications,复制
    [UE4]最简单的虚幻4网络游戏,使用虚幻4内置服务器
    [UE4]Format Text
    [UE4]虚幻4链接独立服务器
  • 原文地址:https://www.cnblogs.com/AaronBlogs/p/6853500.html
Copyright © 2011-2022 走看看