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与 ...
随机推荐
- UVa123 - Searching Quickly
题目地址:点击打开链接 C++代码: #include <iostream> #include <set> #include <map> #include < ...
- [POLITICS] S Korea lawmakers vote to impeach leader
South Korea's Parliament has voted to impeach President Park Geun-hye. The National Assembly motion ...
- 《MEF程序设计指南》博文汇总
<MEF程序设计指南>博文汇总 在MEF之前,人们已经提出了许多依赖注入框架来解决应用的扩展性问题,比如OSGI 实现以Spring 等等.在 Microsoft 的平台上,.NET Fr ...
- 菜单设计器(Menu Designer)及其B/S,C/S双重实现(B/S开源)
ERP/MIS开发 菜单设计器(Menu Designer)及其B/S,C/S双重实现(B/S开源) 一直从事ERP/MIS的开发工作,今天来展现一下菜单设计器的设计,及其用途,并对B/S部分代码 ...
- Python FTP多线程爆破脚本
初学python, 自己编写了个FTP多线爆破小脚本代码很丑= = #!usr/bin/env python #!coding=utf-8 __author__='zhengjim' from ftp ...
- SCO连接SCOM报警
当SCOM中出现红色警报时,在目标计算机上运行一个程序: 1.新建Runbook,添加一个Monitor Alert 2.设置Monitor Alert属性,选择connection,设置警报过滤条件 ...
- 中国大概能用的NTPserver地址
133.100.11.8 prefer210.72.145.44203.117.180.36131.107.1.10time.asia.apple.com64.236.96.53130.149.17. ...
- 2015北京网络赛 J Clarke and puzzle 求五维偏序 分块+bitset
Clarke and puzzle Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/acmicpc20 ...
- air 中的 LocalStore
<ignore_js_op> 在AIR客户端程序中有时需要将用户的一些信息保存在本地,如果信息没有涉及到隐私那么一般用SharedObject类即可将数据存储在本地.由于SharedObj ...
- interactive_timeout
[mysqld] interactive_timeout 交互式连接 会话1 [root@localhost ~]# mysql -umysql -p Enter password: Welcome ...