C# 高精度减法 支持小数(待优化)
是现实思路
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# 高精度减法 支持小数(待优化)的更多相关文章
- C# 高精度加法 支持小数(待优化)
直接上代码 实现思路: 1.首先小数点补 位,9223372036854775808.9+9223372036854775808.9223372036854775808 => 922337203 ...
- C# 高精度乘法 支持小数(待优化)
将N*N乘法转化为(N*n1)+(N*n2)....(N*nn) 乘完后在补充小数点 public static char[] Quadrature(string a, string b) { ] { ...
- 高精度减法--C++
高精度减法--C++ 仿照竖式减法,先对其,再对应位相减. 算法处理时,先比较大小,用大的减小的,对应位再比较大小,用于作为借位符. #include <iostream> #includ ...
- HDU 5920 Ugly Problem 高精度减法大模拟 ---2016CCPC长春区域现场赛
题目链接 题意:给定一个很大的数,把他们分为数个回文数的和,分的个数不超过50个,输出个数并输出每个数,special judge. 题解:现场赛的时候很快想出来了思路,把这个数从中间分为两部分,当位 ...
- js函数验证方式:验证是否是数字,支持小数,负数
验证 datatype="/^\d+(\.\d+)?$/" validatform验证是否是数字 支持小数点 datatype="d" 貌似支持小数 js函数验 ...
- vultr VPS的购买及搭建ss介绍,支持锐速加速优化
Vultr虽然成立时间不久,但是其背景实力还是比较雄厚的,基于全球最大的游戏服务器提供商之一的基础,所以才有实力开设这么多的数据中心.有速度较好的日本东京.洛杉矶等机房,也有我们很多人需要的欧洲机房等 ...
- 【洛谷P2142 高精度减法】
题目描述 高精度减法 输入输出格式 输入格式: 两个整数a,b(第二个可能比第一个大) 输出格式: 结果(是负数要输出负号) 输入输出样例 输入样例#1: 复制 2 1 输出样例#1: 复制 1 说明 ...
- 【洛谷p2142】高精度减法
高精度减法第一遍没有过 高精度减法[传送门] 洛谷算法标签: 总之技术都在高精上了吧. 附代码: #include<iostream> #include<cstdio> #in ...
- P2412高精度减法
传送门 因为忘了带书回家,所以因为这道题我卡了半小时所以写篇博客“纪念”下 高精度减法中,如果被减数比减数小,就要用减数减去被减数.接下来的判断就是本题的核心.直接用strcmp是不行的,例如100与 ...
随机推荐
- [二]Json-lib的用法
1.Json字符串 PrintWriter out=response.getWriter(); // String resultJson="{\"name\":\&quo ...
- (一)Bootstrap简介
Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. Bootstrap优点: 移动设备优先:自 Boot ...
- 授予普通域用户远程桌面连接DC/客户端权限
普通域用户通过远程桌面登录DC: 1)将该用户加入到 Remote Desktop Users 组中
- android---APN切换
android手机客户端在上传文件时,有时候会一直失败,其可能的原因是APN的设置.wap下的成功率极低,所以在进行文件上传时最好设置下 apn为net形式.下面是我在网上找的一些代码,是由wap转n ...
- Clover
为您的 Windows Explorer 插上翅膀! Clover 是 Windows Explorer 资源管理器的一个扩展,为其增加类似谷歌 Chrome 浏览器的多标签页功能. 方便的 Tab ...
- Java中的NIO和IO的对比分析
总的来说,java中的IO和NIO主要有三点区别: IO NIO 面向流 面向缓冲 阻塞IO 非阻塞IO 无 选择器(Selectors) 1.面向流与面向缓冲 Java NIO和IO之间第一个最大的 ...
- [Effective C++ --015]在资源管理类中提供对原始资源的访问
引言 资源管理类是防止资源泄漏的有力武器,但是许多APIs直接指涉资源,除非你发誓永不使用这样的APIs,否则只得绕过资源管理对象(resource-managing objects)直接访问原始资源 ...
- JAVA获取CLASSPATH路径--转
ClassLoader提供了两个方法用于从装载的类路径中取得资源: public URL getResource(String name); public InputStream ge ...
- 认识CoreData-多线程
CoreData使用相关的技术点已经讲差不多了,我所掌握的也就这么多了.... 在本篇文章中主要讲CoreData的多线程,其中会包括并发队列类型.线程安全等技术点.我对多线程的理解可能不是太透彻,文 ...
- Intent实现页面跳转
Intent实现页面跳转: 1. startActivity(intent) 2. startActivityForResult(intent,requestCode); onActivityResu ...