C预言求倒数!

来源:百度知道 编辑:UC知道 时间:2024/05/21 06:20:09
一个正整数的倒数是1除以那个整数。举例来说,37 的倒数是 1/37。有些正整数的倒数是可以用十进制的有限不循环小数表示的,这些正整数包括:

* 10 的幂;
* 2 的幂;
* 2 的幂并跟着数个 0;
* 5 的幂;
* 5 的幂并跟着数个 0。

你的任务是求出这样一些整数的倒数,并用十进制表示出来。
输入:

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

* 都会从行首开始,
* 其第一列的数字不为 0,
* 最多包含 72 个数字。

输出:

对于每一个正整数,输出以精确的十进制表示的该数的倒数。每个结果一行。

例子
输入
4↵
2↵
100↵
6250000↵
1048576↵
输出
0.5↵
0.01↵
0.00000016↵
0.00000095367431640625↵

我觉得不能直接输出双精度,因为取值范围的问题,肯定有其他什么算法……
望高手指教
这个程序结果是不错的,可是我提交上去,有一个测试超时了,不知道有什么办法解决?
还有这个算法在位数特别多的时候恐怕就不可以了吧?题目要求是72位的超长数字!

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int n,i,j;
long temp,arr[20];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%ld",&arr[i]);
}
for(i=0;i<n;i++)
{
printf("0.");
temp=10;
while(temp%arr[i]!=0)
{
while(temp/arr[i]==0)
{
printf("0");
temp*=10;
}
printf("%d",temp/arr[i]);
temp=(temp%arr[i])*10;
}
printf("%d\n",temp/arr[i]);
}
system("pause");
return 0;
}参考吧