C语言咋能同时求商和余数

主要是为了减少计算量,比如把数字转成字符,就要先求余(内部应该也是除法,只是和整除取的结果不一样),再整除,如此得除两回,数量量大了这样算冗余计算太多了或者有其它能提高性... 主要是为了减少计算量,比如把数字转成字符,就要先求余(内部应该也是除法,只是和整除取的结果不一样),再整除,如此得除两回,数量量大了这样算冗余计算太多了
或者有其它能提高性能的方法也行
也就是说:计算一次 同时求出余数和商
展开
 我来答
bhtzu
2014-10-13 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4296万
展开全部
单纯从纯C语言的角度,不可能。唯一可能的就是除数是2的N次方,直接使用位运算。
C语言中没有这样的计算方式,而且这个冗余计算,对性能的影响太小了,目前的CPU都是每秒百万运算以上级别的,多一次整除运算,消耗的时间即使是百万级别的数据,也不会多出1秒。
如果单纯从优化角度考虑,可以使用内嵌汇编,通过一套整除运算从不同寄存器中取出商和余数,但实际上的消耗,也不是节省了50%,因为多占用了寄存器,并且多了一个传递。这样的方法虽然没有具体试验,但应该节省的非常有限,因为标准整数算法的优化不存在了,可能反而更耗时。
从代码量上看,系统提供函数itoa sprintf format等都可以一个语句完全实现数字转换字符串的功能,但实际上,这些函数的实现,也没有对整除取余进行优化。
更多追问追答
追问
主要是,除整和求余的运算量超级大,就算能提示3成也是相当可观的,也就是计算的不是一两千或一两万位是个超级大的数,比如算 π 值时时
追答
计算PI值哪里用到整除和取余了?一般按照公式TT/4=1-1/3+1/5-1/7+1/9......1/n,都是浮点数运算吧,没有整数运算。

整数除法和取余是C语言的基本运算,前面说过了,只有通过位运算和内嵌汇编的寄存器方式,能够从理论上提高效率,但实际上,这个理论上的提高没有多大意义,因为编译的合理优化,很可能产生更好的效率。
这个东西是基础运算,C语言层面上,研究基础运算的效率意义真的不大,只有你学习汇编语言的时候,研究寄存器优化,才对整除等运算可能有提高效果。

如果你研究的是大数运算,那么大数用什么存储?即使是64位整数,也不过最大到10进制的20几位数,优化完全没有意义。如果是超过64位,那么根本没法进行整除运算,你只能通过位运算或者更加冗余的字符串数组去实现,这样的方式下,仅仅去优化整除取余,是没有意义的。
香山雪叶
2014-10-13 · TA获得超过136个赞
知道小有建树答主
回答量:134
采纳率:100%
帮助的人:48.7万
展开全部
int a = 1234;
char b[10] = {0};
sprintf(b,"%d",a);
追问
如果a是个几万位的数呢?或者几十万位呢?上面我只是举个例子,说清原因
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式