永发信息网

求答案,题目是:用C#编写一个程序,要求求出一个20位数乘以另一个20位数的积,输出结果,谢谢啦,

答案:5  悬赏:40  手机版
解决时间 2021-01-18 18:41
求答案,题目是:用C#编写一个程序,要求求出一个20位数乘以另一个20位数的积,输出结果,谢谢啦,
最佳答案
我写过500 位(十进制500位)以上的两数相乘。

20位都是小意思的,没有必要到这里求结果的!

abstract class DefinedMath
{
private const int SplitNum = 1000000000;

///
/// 一个字符串与一个int32的值相加
///

/// 待加的字符串
/// 要加的值
/// 相加后的结果
public static string Add(string num1, int num2)
{
if (num1.Length < 10)
return Convert.ToString(Convert.ToInt32(num1) + num2);
//没有以上判断,9位以内的数字会出现错误结果
string result = "";
int numtemp = 0;
while (num1.Length > 9)
{
numtemp = Convert.ToInt32(num1.Substring(num1.Length - 9, 9));
//得到后者数据
num1 = num1.Substring(0, num1.Length - 9);
numtemp += num2;
num2= numtemp / SplitNum;
//CF作进位标志
numtemp %= SplitNum;
result =numtemp.ToString().PadLeft(9,'0') + result;
if (num2 < 1)
break;
}
if (!(num2 > 0))
return num1 + result;
return Convert.ToString(Convert.ToInt32(num1) + num2) + result;
}

/// /// 两个较大的数进行相加
///

/// 相加的两个字符串1
/// 相加的两个字符串2
/// 返回结果的字符串
public static string Add(string num1,string num2)
{
if (string.IsNullOrEmpty(num2)) return num1;
//为了增强运算速度
if(num2.Length>num1.Length)
{
string swapstring = num2;
num2 = num1;
num1=swapstring;
}
//比较懒了,直接交换一下,省得以后计算谁长谁短

int temp1 =0,temp2=0,CF=0;
string result="";
while(num2.Length>9)
{
temp1 = Convert.ToInt32(num1.Substring(num1.Length-9,9));
num1 = num1.Substring(0,num1.Length-9);
temp2 = Convert.ToInt32(num2.Substring(num2.Length-9,9));
num2 = num2.Substring(0,num2.Length-9);
temp1 += temp2+CF;
CF=temp1/SplitNum;
temp1 %=SplitNum;
result = temp1.ToString().PadLeft(9,'0')+result;
}
return DefinedMath.Add(num1,Convert.ToInt32(num2)+CF)+result;

}

///
/// 一个字符串与一个int的乘法
///

/// 字符串
/// 数值
/// 返回值
public static string Mult(string num1, int num2)
{
Int64 CF = 0, temp = 0;
string result = "";
while (num1.Length > 9)
{
temp = Convert.ToInt64(num1.Substring(num1.Length - 9, 9)) * num2 + CF;
num1 = num1.Substring(0, num1.Length - 9);
CF = temp / SplitNum;
temp %= SplitNum;
result = temp.ToString().PadLeft(9,'0') + result;
}
return Convert.ToString(Convert.ToInt64(num1) * num2+CF)+result;
}

//传说中的两个超大数乘法,原则上可以任意位相乘
public static string Mult(string num1, string num2) {
if (num2.Length > num1.Length)
{
string swaptemp = num2;
num2 = num1;
num1 = swaptemp;
}
//先交换省心还更省事,用长的乘短的,减速小计算次数(调用次数)

if (num1.Length < 10) return (Convert.ToInt64(num1) * Convert.ToInt64(num2)).ToString();
if (num2.Length < 10)
return DefinedMath.Mult(num1, Convert.ToInt32(num2));
//为增强计算速度,将常用的先进行计算
string result = "", resulttemp = "",multnum="",resultk="";
while (num2.Length > 9)
{
multnum = num2.Substring(num2.Length - 9, 9);
num2 = num2.Substring(0, num2.Length - 9);
resulttemp = DefinedMath.Mult(num1, Convert.ToInt32(multnum));
resulttemp = DefinedMath.Add(resulttemp, resultk);
resultk = resulttemp.Substring(0, resulttemp.Length - 9);
result = resulttemp.Substring(resulttemp.Length - 9, 9)+result;
}
//整下最后一次乘法
resulttemp = DefinedMath.Mult(num1, Convert.ToInt32(num2));
resulttemp = DefinedMath.Add(resulttemp, resultk);
return resulttemp + result;
}

}

这个是编写好的类,你可以直接调用的。如果是要实两个超大数字相乘,可以使用该方法的,这些代码是从我的项目原型中抄给你的,没有优化,比如大量使用string而不是stringbuilder对于几百位的处理上还算可以,如果再多可以考虑使用stringbuilder的方式。

调用时直接使用
string temp = DefinedMath.Mult("13431413413251345324534513544153247895732458973248957","157289435732405732497534890257234890752890347589289");
Consloe.WriteLine(temp);即可!

我测试过一个250位的,时间不到1s,在cmd中最大只能输入255位,你可以多次输入,组成一个新的字符串,然后现进行结果的计算。

20位用这个有点大才小用了!其实ulong是一个64bit的数,它的表示能力已经是20位了,但不保证所有20位都有能力表示,但用可以考虑使用两个ulong进行拆分,就没有必要使用这个了!
全部回答
不会。。。。。。。。。。。。。
你想说什么?输入两个20位数,然后输出结果??
这个并不难,你可以考虑逐位相乘,个位相乘加上十位向乘。。。。。用字符串输出即可。追问可以把这个程序源代码发给我吗,,我纠结好长时间了,就是不对,,谢谢啦,,
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
2.7×3.7+0.37×73 = =
世官制的实质是什么?
办公软件word给标题添加1.5磅方框和灰色-20%
用一个数组实现两个栈,尽可能利用存储空间,
--________doyoulikeabedroom?--BecauseIlike
"我不杀伯仁,伯仁却因我而死,"出自哪个典故
要快,谢谢
女儿中.考六a六b能考上青州一中吗?语文英语化
超神吧英雄聚火物理用什么阵容伤害最高
大学在校成绩单怎么查啊
对于喷子,应该怎么办?
中国古代有哪些著名的桥梁?除了赵州桥外,还
求人告诉我答案
南海区交通局小塘养路费征收站地址有知道的么
乾县哪有黄金回收的地方
推荐资讯
台风对大陆纵深的影响是多少公里
如果雕刻机实际走的距离和输入距离不一致怎么
跪求bi站正式会员,谢谢.
请求酿酒的老师能帮帮我,我是刚刚学习酿酒,
停车场(希望苑西北)(通海路28号附近停车场)地
烘焙初学者买什么样的烤箱好
笔记本电脑无法连接家里的wifi怎么办,以前可
公斗鱼(暹罗斗鱼)吐的泡泡很快就破掉,怎么办?
全职猎人中猎人的意思
芳苓18这个私护产品怎么样?有什么副作用吗?
魔兽世界6区12组 服务器
厨房反味 如何根除异味,卫生间反
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?