C# 高精度乘法 支持小数(待优化)
将N*N乘法转化为(N*n1)+(N*n2)....(N*nn)
乘完后在补充小数点
public static char[] Quadrature(string a, string b)
{
char[] r = new char[] { '' };
List<int> bu = new List<int>();
List<int> au = new List<int>();
int adot = a.Length;
int bdot = b.Length;
for (int i = b.Length - ; i >= ; i--)
{
if (b[i] == '.')
{
bdot = i;
}
else
{
bu.Add(b[i] - );
}
}
for (int i = a.Length - ; i >= ; i--)
{
if (a[i] == '.')
{
adot = i;
}
else
{
au.Add(a[i] - );
}
}
a = "";
for (int i = au.Count() - ; i >= ; i--)
{
a += au[i];
} for (int i = ; i < bu.Count(); i++)
{
char[] qq = QuadUnit(a, bu[i]);
string qqq = "";
for (int j = ; j < i + ; j++)
{
qqq = "";
foreach (var item in qq)
{
qqq += item;
}
qq = QuadUnit(qqq, );
}
qqq = "";
foreach (var item in qq)
{
qqq += item;
}
string rr = "";
foreach (var item in r)
{
rr += item;
}
r = SumF(rr, qqq); }
List<char> rer = new List<char>();
for (int i = ; i < r.Count(); i++)
{
rer.Add(r[i]);
}
int con = rer.Count();
int dot = a.Length + b.Length - (adot + bdot); //Console.WriteLine(a);
//Console.WriteLine(b);
//Console.WriteLine(a.Length);
//Console.WriteLine(b.Length);
//Console.WriteLine(adot);
//Console.WriteLine(bdot);
//Console.WriteLine(con);
//Console.WriteLine(dot);
//Console.WriteLine(con-dot); if (con - dot > )
{
if (con - dot != con)
{
rer.Insert(con - dot + , '.');
}
}
else if (con - dot < )
{
rer.Insert(, '.');
rer.Insert(, ''); int co = - * (con - dot) - ;
while (co > )
{
rer.Insert(, '');
co--;
}
}
else
{
rer.Insert(, '.');
rer.Insert(, '');
} return rer.ToArray();
}
public static char[] QuadUnit(string a, int b)
{
int r = ;
int jw = ;
char[] c = a.ToCharArray();
List<char> items = new List<char>();
List<char> ritems = new List<char>();
for (int i = c.Count() - ; i >= ; i--)
{
if (a[i] == '.')
{
r = '.';
items.Add(Convert.ToChar(r));
}
else
{
r = ((int)c[i] - ) * b + jw;
jw = ;
if (r >= )
{
jw = r / ;
r %= ;
}
items.Add(Convert.ToChar(r.ToString()));
} }
if (jw > )
{
items.Add(Convert.ToChar(jw.ToString()));
} for (int i = (items.Count() - ); i >= ; i--)
{
ritems.Add(items[i]);
}
return ritems.ToArray();
}
C# 高精度乘法 支持小数(待优化)的更多相关文章
- C# 高精度加法 支持小数(待优化)
直接上代码 实现思路: 1.首先小数点补 位,9223372036854775808.9+9223372036854775808.9223372036854775808 => 922337203 ...
- C# 高精度减法 支持小数(待优化)
是现实思路 1,先小数点补位,8913758923475893274958738945793845-4893127498372459823745324532453245.284929384729837 ...
- JS高精度乘法计算问题(牛客网乘法-求 a 和 b 相乘的值,a 和 b 可能是小数,需要注意结果的精度问题)
用到的知识点===> toFixed(num); toFixed() 方法可把 Number 四舍五入为指定小数位数的数字; 参数num: 代表小数位数: 例:var num = 5.56789 ...
- 高精度乘法--C++
高精度乘法--C++ 模仿竖式乘法,在第一步计算的时候将进位保留,第一步计算完再处理进位.(见代码注释) 若要处理正负情况,可在数据输入后加以判断,处理比较简单. 小数计算也可参照该方法,不过对齐方式 ...
- 高精度乘法(FFT)
学会了FFT之后感觉自己征服了世界! 当然是幻觉... 不过FFT还是很有用的,在优化大规模的动规问题的时候有极大效果. 一般比较凶残的计数动规题都需要FFT(n<=1e9). 下面是高精度乘法 ...
- [vijos P1040] 高精度乘法
如果这次noip没考好,完全是因为从7月29日之后就没有再写过程序了.说起来,真是一个泪流满面的事实… 那这样一个弱智题练手恢复代码能力,竟然还花了我两个晚上(当然不是两整个晚上…) 第一天TLE了, ...
- 【PKU1001】Exponentiation(高精度乘法)
Exponentiation Time Limit: 500MS Memory Limit: 10000K Total Submissions: 145642 Accepted: 35529 ...
- hdu 1042 N!(高精度乘法 + 缩进)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1042 题目大意:求n!, n 的上限是10000. 解题思路:高精度乘法 , 因为数据量比较大, 所以 ...
- hdu 1042 N!(高精度乘法)
Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input One N in ...
随机推荐
- JBOss 端口没占用!
打开exlipse ,启动服务器 后,报如下错误:
- 用HTML5 Canvas 做擦除及扩散效果
2013年的时候曾经使用canvas实现了一个擦除效果的需求,即模拟用户在模糊的玻璃上擦除水雾看到清晰景色的交互效果.好在2012年的时候学习HTML5的时候研究过canvas了,所以在比较短的时间内 ...
- Codeforces Round #325 (Div. 2) B. Laurenty and Shop 前缀和
B. Laurenty and Shop Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/586/p ...
- 《Java并发编程实战》第十五章 原子变量与非堵塞同步机制 读书笔记
一.锁的劣势 锁定后假设未释放.再次请求锁时会造成堵塞.多线程调度通常遇到堵塞会进行上下文切换,造成很多其它的开销. 在挂起与恢复线程等过程中存在着非常大的开销,而且通常存在着较长时间的中断. 锁可能 ...
- iOS开发——面试笔试精华(一)
面试笔试精华(一) 1. #import 跟#include.@class有什么区别?#import<> 跟 #import”"又什么区别? 1> #imp ...
- 【面试题】如何让C语言自动发现泄漏的内存
1. 题目 改造malloc和free函数,使C语言能自动发现泄漏的内存,在程序退出时打印中遗漏的内存地址和大小. 2. 思路 用一个链表来记录已经分配的内存地址.在malloc时,把分配的内存地址和 ...
- Asp.Net 之 未能加载文件或程序集 system.web.extensions 解决方法
最近做项目发现未能加载文件或程序集的错误,这是由于我的机器上没有安装Ajax的原因.问题解决后,整理如下:表现:1."System.Web.Extensions, Version=1.0.61025. ...
- How to install VXDIAG Honda, Toyota and JLR SDD software
EOBD2 has newly launched Allscanner VXDIAG multi diagnostic tool with OEM diagnostic software: Honda ...
- 修改UIBarButtonItem字体大小、颜色等相关属性
在ios中如果想修改UIBarButtonItem里面的内容有很多种方法,常见的就是自定义contentView 但是有时候因为懒不想自定义只想在原来的文字上进行修改 如果只是修改UIBarButt ...
- the first assignment of software testing
Github ID: bzdwdmzjsmff Github address: https://github.com/bzdwdmzjsmff alternative article: Increa ...