C语言 高手进~~

来源:百度知道 编辑:UC知道 时间:2024/05/21 04:53:18
10. 倒数问题
成绩: 10 / 折扣: 0.9
一个正整数的倒数是1除以那个整数。举例来说,37 的倒数是 1/37。有些正整数的倒数是可以用十进制的有限不循环小数表示的,这些正整数包括:

10 的幂;
2 的幂;
2 的幂并跟着数个 0;
5 的幂;
5 的幂并跟着数个 0。
你的任务是求出这样一些整数的倒数,并用十进制表示出来。

输入
输入的第一行是要处理的正整数的个数,后面每一行输入一个正整数。每一个正整数都符合以下条件:

都会从行首开始,
其第一列的数字不为 0,
最多包含 72 个数字。
输出
对于每一个正整数,输出以精确的十进制表示的该数的倒数。每个结果一行。

记住所给的数在1~10^10000之间,固任何数据类型不可用,只能用字符型数组……
算法要尽量优化,否则会有编译超时问题,规定编译时间不得超过1s,尤其注意的是我们学校的系统很差,一不小心就超时~~(满意有加分哟~)

给思路,程序自己写
首先你要会写用数组表示长整数的乘除法
比如512用数组表示,然后乘以2=1024,这个过程你要会用数组写。
乘法就是
bn=an*2求余
b(n-1)=MOD(a(n-1)+bn*2/10取整)
除法就是
b1=a1除以2取整
b2=(b1除以2求余*10+b2)/2 再求余
以上都是拿2做比方

然后开始写程序
从数组最后一位开始检查
如果=1,那么倒数是1
如果=2,4,6,8则,bn=1,把数组a不断除2,同时数组b乘以5,直到数组a=1
如果=5,则,bn=1,把数组a不断除以5,同时数组b乘以2,直到数组a=1
如果=0,检查最后一个不为0的数据am
{如果am=1,am中0的个数-1就是bm前面0的个数
如果=5,从这位算起,按前面的方法乘以2,得到数组b,再往前面插入若干位0
如果=2,4,6,8,同理
}
思路就是这样,写的时候要小心很多细节。

不用写了``
越写越差`就这样可以了