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与 ...
随机推荐
- 325. Maximum Size Subarray Sum Equals k
最后更新 二刷 木有头绪啊.. 看答案明白了. 用的是two sum的思路. 比如最终找到一个区间,[i,j]满足sum = k,这个去见可以看做是 [0,j]的sum 减去 [0,i]的Sum. 维 ...
- C#基础系列(一)
1.vs中F5(调试)和Ctrl + F5(直接运行不调试)的区别: Ctrl+F5是直接运行生成的程序,不进行重新编绎,所以运行起来比较快F5是重新编绎后再运行,这样可以在程序代码中设置断点跟踪来调 ...
- 求前几日的平均值用obj.reduce()方法
const average = data=>data.map((item, idx, origin)=>Math.round(origin.slice(0,idx+1).reduce((a ...
- [一位菜鸟的COCOS-2D编程之路]精灵表单的制作以及简易动画的生成
1.第一步:使用Zwoptex 制作精灵表单 2.制作的表单的名称为 cocos2Dpng,cocos2D.plist: 3.精灵的动画效果 主要分为五部分. // on "init&quo ...
- java常见面试题
JAVA相关基础知识 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分 ...
- WinForm程序启动控制台窗口Console
本文转载:http://blog.csdn.net/oyi319/article/details/5753311 2.WinForm程序和控制台窗口Console 如果你调试过SharpDevelop ...
- linux shell date格式化配置
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- Android 如何更换屏幕上锁界面背景图片
前言 欢迎大家我分享和推荐好用的代码段~~ 声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net ...
- [Node.js] Creating Demo APIs with json-server
json-server makes it extremely easy to setup robust JSON apis to use for demos and proof of concepts ...
- PHP高效获取远程图片尺寸和大小(转)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...