将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# 高精度乘法 支持小数(待优化)的更多相关文章

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

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

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

    是现实思路 1,先小数点补位,8913758923475893274958738945793845-4893127498372459823745324532453245.284929384729837 ...

  3. JS高精度乘法计算问题(牛客网乘法-求 a 和 b 相乘的值,a 和 b 可能是小数,需要注意结果的精度问题)

    用到的知识点===> toFixed(num); toFixed() 方法可把 Number 四舍五入为指定小数位数的数字; 参数num: 代表小数位数: 例:var num = 5.56789 ...

  4. 高精度乘法--C++

    高精度乘法--C++ 模仿竖式乘法,在第一步计算的时候将进位保留,第一步计算完再处理进位.(见代码注释) 若要处理正负情况,可在数据输入后加以判断,处理比较简单. 小数计算也可参照该方法,不过对齐方式 ...

  5. 高精度乘法(FFT)

    学会了FFT之后感觉自己征服了世界! 当然是幻觉... 不过FFT还是很有用的,在优化大规模的动规问题的时候有极大效果. 一般比较凶残的计数动规题都需要FFT(n<=1e9). 下面是高精度乘法 ...

  6. [vijos P1040] 高精度乘法

    如果这次noip没考好,完全是因为从7月29日之后就没有再写过程序了.说起来,真是一个泪流满面的事实… 那这样一个弱智题练手恢复代码能力,竟然还花了我两个晚上(当然不是两整个晚上…) 第一天TLE了, ...

  7. 【PKU1001】Exponentiation(高精度乘法)

    Exponentiation Time Limit: 500MS   Memory Limit: 10000K Total Submissions: 145642   Accepted: 35529 ...

  8. hdu 1042 N!(高精度乘法 + 缩进)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1042 题目大意:求n!, n 的上限是10000. 解题思路:高精度乘法 , 因为数据量比较大, 所以 ...

  9. hdu 1042 N!(高精度乘法)

    Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!   Input One N in ...

随机推荐

  1. 设置 ubuntu ftp

    apt-get install后就是启动不了,ftp localhost connection refued 1. 关闭ubuntu防火墙 :  ufw disable 2. 还是不行,报 500 m ...

  2. iOS_城市定位

    技术点-利用CoreLoaction框架,实现城市定位功能. 原理: 利用苹果官方提供的CoreLocation框架实现城市定位的功能: 该框架主要包括两个比较有用的类:定位类CLLocationMa ...

  3. Fox-H 函数

    1.定义 2.特例 3.在分数阶微分方程中的应用 4.如何画图

  4. ALV 插入可编辑的空行

    在FCAT 中 设置需要的字段为 可以编辑,然后LOOP 显示 ALV 的内表,将不需要的行设置为 不可编辑 1. 在ALV用的内表中添加控制 style 的 内表 TYPES:BEGIN OF TY ...

  5. Java文件操作源码大全

    Java文件操作源码大全 1.创建文件夹 52.创建文件 53.删除文件 54.删除文件夹 65.删除一个文件下夹所有的文件夹 76.清空文件夹 87.读取文件 88.写入文件 99.写入随机文件 9 ...

  6. Windows Server 2008找回密码

    1.通过Windows Server 2008 R2的安装光盘引导计算机启动,映像加载完毕后 ,按 Shift+F10 ,打开命令提示符界面,进入Windows目录所在分区(cd windows\sy ...

  7. Jenkins(二)

    官网:https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins 我的这篇文章不过简单的依据上文,介绍Jenkins提供了哪些功能.详细大家还是要 ...

  8. Android蓝牙操作笔记

    蓝牙是一种支持设备短距离传输数据的无线技术.android在2.0以后提供了这方面的支持. 从查找蓝牙设备到能够相互通信要经过几个基本步骤(本机做为服务器): 1.设置权限 在manifest中配置 ...

  9. iOS开发--混编篇&swift与OC混合使用

    Swift与OC混合使用 swift 语言出来后,可能新的项目直接使用swift来开发,但可能在过程中会遇到一些情况,某些已用OC写好的类或封装好的模块,不想再在swift 中再写一次,哪就使用混编. ...

  10. [Effective C++ --016]成对使用New和Delete时要采用相同形式

    这一节比较简单,可以总结为以下: std::string *stringPtr1 = new std::string; std::]; .. delete stringPtr1; // delete ...