n阶浮点行高精度乘法

来源:百度知道 编辑:UC知道 时间:2024/05/24 10:29:21
本人实在菜 想结合一道题目做一个高精度n阶幂的程序
思路如下:分别读入数据 num 和 n ,其中 num 是浮点型输入的 必然带有小 数点 ,n 是正整数 我的想法是先用字符串读入浮点型数据 然后将它提炼成没有小数点的纯整数串 利用自编高精度乘法函数进行n阶自乘 最后输出数据时把小数点补齐。。。
下述代码尚只能进行 提炼整数 和n阶自乘 可刚到这就卡住了。。。 核心部分的n阶自乘只能实现2阶 。。。n再大些就不对了
哪位大侠能帮我改改~~~
#include<stdio.h>
#include<string.h>
#define MAX 512

int point(char ori_num[MAX],char num[MAX])
{
int i,a=0,l,j=0;
l=strlen(ori_num);
if (ori_num[0]!='0')
{
for (i=l-1;i>=0;i--) if (ori_num[i]!='.') a++;else break;
for (i=0;i<l;i++) if (ori_num[i]!='.') num[j++]=ori_num[i];
}
else
{
for (i=2;i<l;i++) if (ori_num[i]!='0') break;
for (;i<l;i++) num[j++]=ori_num[i];
a=l-2;
}
return (-a);
}

void reverse(char *str)
{
int i;
char c;
for (i=0;i<strlen(str)/2;i++)
{

只有一点错误:
该错误楼上仁兄已经说明过了,在multi函数里
memset(product,'\0',sizeof(product))
该句只将product的前4个字节清0了。
解决方法之一:如楼上所说。
解决方法之二:将该句放到main函数中每次调用multi函数前,即:
while (n--)
{
memset(product,'\0',sizeof(product));
multi(num1,num2,product);
}
同理,multi函数中
memset(num2,'\0',sizeof(num2));
该语句是没有作用的,在主函数里num2已经都被初始化过了。

关于楼上仁兄所述的“其次”,你的程序并没有错,因为l是下标。

只要product正确清0,这程序已经可以计算出正确结果了。只需要再把小数点调整正确就可以了。

还有一些逻辑上的问题可以优化,比如程序里反复的执行reverse,这是没必要的,只要当需要输出最后结果时执行一次就可以了。再进言之,不必使用reverse直接从数组高位进行计算也是可以的。你可以尝试尝试~~

再给你一段我原来做pku的oj1001题的程序做参考。
程序是用C++写的,而且没有用char[]而是用的string,但是基本原理是一样的。其中包括一些对输入的处理和对中间结果的处理,例如剔除末尾0等等。你可以只注意其中的主要部分。

写程序一定要学会调试,无论是用编译器的调试还是自己写代码调试。
像你这段程序里,全部计算都是用ASCII码进行的,很不方便调试观察,那就必须自己写代码输出中间结果,看哪里不是你预想的结果,然后做调整。

能主动尝试写通用程序这样的精神很不错,希望你能走的更远更好~~

#include <iostream>
#include <string>
using namespace std;<