是现实思路

1,先小数点补位,8913758923475893274958738945793845-4893127498372459823745324532453245.284929384729837498237492 => 8913758923475893274958738945793845.000000000000000000000000-4893127498372459823745324532453245.284929384729837498237492.

2,进行计算,最后补符号

        public static void BuweiF(ref string a, ref string b)
{
int al = a.Length;
int bl = b.Length;
string[] c = a.Split('.');
string[] d = b.Split('.');
int i = al - c[].Length;
int j = bl - d[].Length;
if (i != && j != )
{
if (i > j)
{
while (i != j)
{
b += "";
j++;
}
}
else
{
while (i != j)
{
a += "";
i++;
}
}
}
else if (i != && j == )
{
b += ".";
j++;
while (i != j)
{
b += "";
j++;
}
}
else if (i == && j != )
{
a += ".";
i++;
while (i != j)
{
a += "";
i++;
}
}
//Console.WriteLine(a);
// Console.WriteLine(b);
}
public static char[] Diff(string a, string b)
{
BuweiF(ref a, ref b);
List<char> item = new List<char>();
int al = a.Length;
int bl = b.Length;
int r = ;
int jw = ;//退位
bool fushu = false;
if (al > bl)
{
do
{
if (al > && bl > )
{
if (a[al - ] == '.')
{
r = '.';
}
else
{
r = (int)a[al - ] - (int)b[bl - ] - jw;
jw = ;
if (r < )
{
r = + r;
jw++;
}
}
}
else if (al > && bl <= )
{
r = a[al - ] - - jw;
jw = ;
if (r < )
{
r = + r;
jw++;
}
} if (r == )
{
item.Add(Convert.ToChar(r));
}
else
{
item.Add(Convert.ToChar(r.ToString()));
}
al--; bl--;
} while (al > || bl > );
}
else if (al < bl)
{
fushu = true;
do
{
if (al > && bl > )
{
if (b[bl - ] == '.')
{
r = '.';
}
else
{
r = (int)b[bl - ] - (int)a[al - ] - jw;
jw = ;
if (r < )
{
r = + r;
jw++;
}
}
}
else if (bl > && al <= )
{
r = b[bl - ] - - jw;
jw = ;
if (r < )
{
r = + r;
jw++;
}
} if (r == )
{
item.Add(Convert.ToChar(r));
}
else
{
item.Add(Convert.ToChar(r.ToString()));
}
al--; bl--;
} while (al > || bl > );
}
else
{
if (a[] > b[])
{
do
{
if (al > && bl > )
{
if (a[al - ] == '.')
{
r = '.';
}
else
{
r = (int)a[al - ] - (int)b[bl - ] - jw;
jw = ;
if (r < )
{
r = + r;
jw++;
}
}
}
else if (al > && bl <= )
{
r = a[al - ] - - jw;
jw = ;
if (r < )
{
r = + r;
jw++;
}
} if (r == )
{
item.Add(Convert.ToChar(r));
}
else
{
item.Add(Convert.ToChar(r.ToString()));
}
al--; bl--;
} while (al > || bl > );
}
else
{
fushu = true;
do
{
if (al > && bl > )
{
if (b[bl - ] == '.')
{
r = '.';
}
else
{
r = (int)b[bl - ] - (int)a[al - ] - jw;
jw = ;
if (r < )
{
r = + r;
jw++;
}
}
}
else if (bl > && al <= )
{
r = b[bl - ] - - jw;
jw = ;
if (r < )
{
r = + r;
jw++;
}
} if (r == )
{
item.Add(Convert.ToChar(r));
}
else
{
item.Add(Convert.ToChar(r.ToString()));
}
al--; bl--;
} while (al > || bl > );
}
}
if (item[item.Count() - ] == '' && item[item.Count() - ] != '.')
{
item.RemoveAt(item.Count() - );
}
if (fushu)
{
item.Add('-');
}
return item.ToArray(); }

C# 高精度减法 支持小数(待优化)的更多相关文章

  1. C# 高精度加法 支持小数(待优化)

    直接上代码 实现思路: 1.首先小数点补 位,9223372036854775808.9+9223372036854775808.9223372036854775808 => 922337203 ...

  2. C# 高精度乘法 支持小数(待优化)

    将N*N乘法转化为(N*n1)+(N*n2)....(N*nn) 乘完后在补充小数点 public static char[] Quadrature(string a, string b) { ] { ...

  3. 高精度减法--C++

    高精度减法--C++ 仿照竖式减法,先对其,再对应位相减. 算法处理时,先比较大小,用大的减小的,对应位再比较大小,用于作为借位符. #include <iostream> #includ ...

  4. HDU 5920 Ugly Problem 高精度减法大模拟 ---2016CCPC长春区域现场赛

    题目链接 题意:给定一个很大的数,把他们分为数个回文数的和,分的个数不超过50个,输出个数并输出每个数,special judge. 题解:现场赛的时候很快想出来了思路,把这个数从中间分为两部分,当位 ...

  5. js函数验证方式:验证是否是数字,支持小数,负数

    验证 datatype="/^\d+(\.\d+)?$/" validatform验证是否是数字 支持小数点 datatype="d" 貌似支持小数 js函数验 ...

  6. vultr VPS的购买及搭建ss介绍,支持锐速加速优化

    Vultr虽然成立时间不久,但是其背景实力还是比较雄厚的,基于全球最大的游戏服务器提供商之一的基础,所以才有实力开设这么多的数据中心.有速度较好的日本东京.洛杉矶等机房,也有我们很多人需要的欧洲机房等 ...

  7. 【洛谷P2142 高精度减法】

    题目描述 高精度减法 输入输出格式 输入格式: 两个整数a,b(第二个可能比第一个大) 输出格式: 结果(是负数要输出负号) 输入输出样例 输入样例#1: 复制 2 1 输出样例#1: 复制 1 说明 ...

  8. 【洛谷p2142】高精度减法

    高精度减法第一遍没有过 高精度减法[传送门] 洛谷算法标签: 总之技术都在高精上了吧. 附代码: #include<iostream> #include<cstdio> #in ...

  9. P2412高精度减法

    传送门 因为忘了带书回家,所以因为这道题我卡了半小时所以写篇博客“纪念”下 高精度减法中,如果被减数比减数小,就要用减数减去被减数.接下来的判断就是本题的核心.直接用strcmp是不行的,例如100与 ...

随机推荐

  1. 射频识别技术漫谈(1)——概念、分类

    现代社会智能卡已经渗透到生活的方方面面,公交卡.考勤卡.身份证.手机卡等等数不胜数.    智能卡按使用时是否和读卡器接触可分为接触式智能卡和非接触式智能卡,接触式智能卡上有6-8个触点,使用时插在卡 ...

  2. Linux协议栈代码阅读笔记(二)网络接口的配置

    Linux协议栈代码阅读笔记(二)网络接口的配置 (基于linux-2.6.11) (一)用户态通过C库函数ioctl进行网络接口的配置 例如,知名的ifconfig程序,就是通过C库函数sys_io ...

  3. Oracle 中 union与union all

    如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字. union(或称为联合)的作用是将多个结果合并在一起显示出来. union和uni ...

  4. 自己写一个与startWith类似的判断方法

    package com.hanqi.lianxi; import java.util.Scanner; public class startWith {        //自己顶一个与startWit ...

  5. 【转】如何从零开始学会 Ruby on Rails?

    文章转自:http://huacnlee.com/blog/how-to-start-learning-ruby-on-rails/ 这个话题曾经给身边的很多朋友说过同样的话题,这里整理以下. 如果你 ...

  6. springMVC3学习(五)--MultiActionController

    Spring提供一个多动作控制器,使用它你能够将几个动作合并在一个控制器里,这样能够把功能组合在一起. 多动作控制器存在在一个单独的包中--org.springframework.web.mvc.mu ...

  7. 理解class.forName()

    使用jdbc方式连接数据库时会使用一句代码Class.forName(String className).这句话是什么意思呢?首先说一点Class.forName(String className)这 ...

  8. MySQL 中的两种临时表

    来源:阿里云RDS - 数据库内核组 链接:http://mysql.taobao.org/monthly/2016/06/07/ 外部临时表 通过CREATE TEMPORARY TABLE 创建的 ...

  9. 垃圾回收算法手册:自动内存管理的艺术 BOOK

    垃圾回收算法手册:自动内存管理的艺术 2016-03-18 华章计算机 内容简介 PROSPECTUS 本书是自动内存管理领域的里程碑作品,汇集了这个领域里经过50多年的研究沉积下来的最佳实践,包含当 ...

  10. iOS 常见知识点(三):Lock

    iOS 常见知识点(一):Runtime iOS 常见知识点(二):RunLoop 锁是最常用的同步工具.一段代码段在同一个时间只能允许被有限个线程访问,比如一个线程 A 进入需要保护代码之前添加简单 ...