c语言编程时为了解决大数相乘时的溢出问题采用大数相加代替的策略有效吗?

既然两个大数相乘之后的结果会溢出,那么采用相加的策略不是一样吗,计算出的值一样大,不是一样会溢出吗?

有其他的方法啊。比如
一个数太大,分两段AB
同理一个数分成CD
AB * CD = .....就可以了。需要进位的话就分成三段追问

你好,我的意思是:假如有两个大数A,B A*B=X,X太大计算机无法表示,而用你所说的这种分治的类似于大数相加的解法 令A=C+D,B=M+N,相乘之后为CM+CN+DM+DN,这个式子的结果也是X啊,仍旧是计算机无法表示的数这样不是同样会溢出吗?

追答

不是这个意思
比如现在假设计算机只能表示0-9
那么11 *11怎么算?
a = b = c = d = 1;
ab * cd = ab*c + ab * 10 * d
= 10 * a * c + b * c + 10 * a * a * d + b * 10 * d;
这时候a*c, b*c, b*d 就是支持的。然后继续这样分下去,
就像小学血乘法一样。是一位一位算的。这里把“一位”理解成计算机一个数字比如int,ULONg能表示的最大范围

温馨提示:答案为网友推荐,仅供参考
相似回答