在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 = ;
  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 = ; i < (a.Length > b.Length ? a.Length : b.Length); i++)
  31. {
  32. if (i >= a.Length)
  33. one.Insert(i - a.Length, );
  34. else
  35. one.Add(int.Parse(a[i].ToString()));
  36. if (i >= b.Length)
  37. two.Insert(i - b.Length, );
  38. else
  39. two.Add(int.Parse(b[i].ToString()));
  40. }
  41.  
  42. //array集合用于存储相加的和,所以长度最大也只会比最大的数长度长1,刚开始全部存0
  43. for (int i = ; i <= (a.Length > b.Length ? a.Length : b.Length); i++)
  44. {
  45. array.Add();
  46. }
  47.  
  48. //从低位往高位每位开始相加,如果相加 >=10 则进1取余
  49. for (int i = (a.Length > b.Length ? a.Length : b.Length) - ; i >= ; i--)
  50. {
  51. array[i + ] += (one[i] + two[i]) % ;
  52. k = (one[i] + two[i]) / ;
  53.  
  54. array[i] += k;
  55. }
  56.  
  57. //如果首位为0,则移除
  58. if (array[] == )
  59. {
  60. array.RemoveAt();
  61. }
  62.  
  63. //将集合转换成字符串返回
  64. StringBuilder result = new StringBuilder();
  65. for (int i = ; i < array.Count; i++)
  66. {
  67. result.Append(array[i]);
  68. }
  69. return result.ToString();
  70. }
  71. }
  72. }

C#实现大数相加的更多相关文章

  1. hdu acm-1047 Integer Inquiry(大数相加)

    Integer Inquiry Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  2. 用字符串模拟两个大数相加——java实现

    问题: 大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求.可以使用字符串来表示大数,模拟大数相加的过程. 思路: 1.反转两个字符串,便于从低位到高位相加和最高位 ...

  3. 随机数组&大数相加

    随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中 一,      设计思路: 先生成随机数数组,再将数组保存在一个字符串中,然后将数组各数字加和, ...

  4. java-两个大数相加

    题目要求:用字符串模拟两个大数相加. 一.使用BigInteger类.BigDecimal类 public static void main(String[] args) { String a=&qu ...

  5. POJ 1503 Integer Inquiry(大数相加,java)

    题目 我要开始练习一些java的简单编程了^v^ import java.io.*; import java.util.*; import java.math.*; public class Main ...

  6. 杭电ACM(1002) -- A + B Problem II 大数相加 -提交通过

    杭电ACM(1002)大数相加 A + B Problem II Problem DescriptionI have a very simple problem for you. Given two ...

  7. Linux C/C++ 编程练手 --- 大数相加和大数相乘

    最近写了一个大数相乘和相加的程序,结果看起来是对的.不过期间的效率可能不是最好的,有些地方也是临时为了解决问题而直接写出来的. 可以大概说一下相乘和相加的解决思路(当然,大数操作基本就是两个字符串的操 ...

  8. hdu1002大数相加

    A + B Problem II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...

  9. 基于visual Studio2013解决C语言竞赛题之1077大数相加

        题目 解决代码及点评 /************************************************************************/ /* ...

  10. 大数相加(类似杭电acm1002)

    /*输入两个非常大的整数(完全超出了int.long的表示范围),这个整数的长度可能超过100位,计算并输出这两个数相加的结果.*/ //自己用题目所给的案例测试,输出是正确的,也能输出正确的结果,不 ...

随机推荐

  1. css margin塌陷问题

    一.同级块级元素塌陷 html <h2> 同级块级元素塌陷 </h2> <div class="block1"> block1 </div ...

  2. [转]手工实现RTTI

    运行时的动态类型检查(RTTI,Run Time Type Indentifiation)是c++中提供的一项语言机制,它主要用于判断多态对象的具体类型. 为什么不使用c++提供的RTTI功能  但c ...

  3. TagsView.vue

    1.TagsView.vue <template> <div class="tags-view-container"> <scroll-pane cl ...

  4. 【JavaFx】客户端服务器C/S架构搭建

    客户端获取服务器端软件更新版本方法: package com.platform.ui.update; import java.io.BufferedInputStream; import java.i ...

  5. quartz 实现调度任务 SchedulerManager

    package cn.com.do1.component.common.util; import org.quartz.*; import org.quartz.impl.StdSchedulerFa ...

  6. 关于Java开发过程中质量提升-1代码格式配置

    在项目开发维护中,编码规范作为开发规范的一个组成部分,是十分重要和必须的,它不仅仅是为了提高开发效率,也有利于降低后期维护开发的成本.编码规范的根本目的就是要让不仅代码可以一目了然,也可以很容易的理解 ...

  7. smtpclient 邮件发送测试

    SmtpClient smtp = new SmtpClient(); //实例化一个SmtpClient smtp.DeliveryMethod = SmtpDeliveryMethod.Netwo ...

  8. 利用MapReduce实现倒排索引

    这里来学习的是利用MapReduce的分布式编程模型来实现简单的倒排索引. 首先什么是倒排索引? 倒排索引是文档检索中最常用的数据结构,被广泛地应用于全文搜索引擎. 它主要是用来存储某个单词(或词组) ...

  9. 修改 login的串口重定向

     1 在console-telnet 使用vi工具编辑 /etc/inittab 文件  vi /etc/inittab (回车)2 按 i 进入编辑模式:3 将文件中的ttyS0  改为 ttyS3 ...

  10. java资料——哈希表(散列表)(转)

    哈希表       散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度. ...