`

两个数相乘,小数点后位数没有限制,请写一个高精度算法

 
阅读更多
解题思路:将两组小数用数组存储,计算机两组小数点位数的总和,将小数点剔除,将小数点后面的位数向前移动一位。即开始求两个大整数的乘积。用递归的思路输出,得到的乘积,同时通过计算的小数点的位数,来判定什么时候输出小数点。

求两个大整数的乘积的思路:用结点来存储乘积的每一位,可以是数值不受限制。


关键函数:istream&getline(char *pch,int nCount,char delime='\n')
extern char * strchr(char *str,char character)
extern char * strrev(char *s)

#include<iostream>
using namespace std;
#define MAX 10000
struct Node{
int data;
Node *next;
};
void output(Node *head,int pos)
{
if(!head->next&&!head->data)return;
output(head->next,pos-1);
cout<<head->data;
if(!pos)cout<<".";
}
void Mul(char *a,char *b,int pos)
{
char *ap=a,*bp=b;
Node *head=0;
head=new Node;head->data=0,head->next=0; //头
Node *p,*q=head,*p1;
int temp=0,temp1,bbit;
while(*bp) //若乘数不为空 ,继续.
{
p=q->next;p1=q;
bbit=*bp-48; //把当前位转为整型
while(*ap||temp) //若被乘数不空,继续
{
if(!p) //若要操作的结点为空,申请之
{
p=new Node;
p->data=0;
p->next=0;
p1->next=p;
}
if(*ap==0)temp1=temp;
else { temp1=(p1->data)+(*ap-48)*bbit+temp;ap++; }
p1->data=temp1%10; //留当前位
temp=temp1/10; //进位以int的形式留下.
p1=p;p=p->next; //被乘数到下一位
}
ap=a;bp++;q=q->next; //q进下一位
}
p=head;
output(p,pos); //显示
cout<<endl;
while(head) //释放空间
{
p=head->next;
delete head;
head=p;
}
}
int main()
{
cout<<"请输入两个数"<<endl;
char test1[MAX],test2[MAX],*p;
int pos=0;
cin.getline(test1,MAX,'\n');
cin.getline(test2,MAX,'\n');
if(p=strchr(test1,'.'))
{
pos+=strlen(test1)-(p-test1)-1;
do
{
p++;
*(p-1)=*p;
}while(*p);
}
if(p=strchr(test2,'.'))
{
pos+=strlen(test2)-(p-test2)-1;
do
{
p++;
*(p-1)=*p;
}while(*p);
}
Mul(strrev(test1),strrev(test2),pos);
system("PAUSE");
return 0;
}
分享到:
评论

相关推荐

    高精度算法

    【高精度算法】是一种处理超出普通计算机数据类型所能表示范围的超大整数或极小浮点数的计算方法。这种算法广泛应用于科学计算、密码学、数学软件等领域,能够处理小数点后数百位乃至数千亿位的数字。在计算机中,...

    高精度_c++高精度_

    在C++中,由于内置的`int`、`long long`等类型有其固定的大小限制,对于需要处理大数值的情况,就需要自定义数据结构和算法来实现高精度计算。以下将详细探讨C++中的高精度实现策略、常见的库以及相关操作。 1. **...

    腾讯2017校园招聘 软件测试岗笔试题(1).pdf

    3. 两个数相乘,小数点后位数没有限制:可以使用高精度算法。 4. 将 A,B 两链表的元素交叉归并:可以使用链表的 merge 操作。 面试题 1. 定义一个宏,比较两个数 a、b 的大小:可以使用 #define Max(a,b) ( a/b)?a...

    腾讯笔试试题整理(包括答案)

    - **题目描述**:设计一个算法,实现两个高精度数(小数点后位数不受限制)的乘法。 - **解答思路**: 1. **记录小数点位置**:首先记录两个数中小数点的位置。 2. **去除小数点**:将两个数转换为整数形式,便于...

    腾讯公司C_C++笔试题

    3. 高精度乘法算法:对于不限小数点后位数的两个数相乘,需要实现一个大整数乘法的算法。通常可以使用链表存储大整数,逐位进行乘法运算并处理进位。给出的代码示例中,首先确定小数点位置,然后去掉小数点,将两个...

    腾讯笔试题附答案版

    两个数相乘,小数点后位数没有限制,请写一个高精度算法。 **算法提示:** 1. 确定小数点在两个数中的位置`l1`, `l2`。 2. 去掉两个数中的小数点,将它们转换为整数。 3. 使用高精度算法计算两整数相乘的结果。 4. ...

    浮点LMS算法的fpga实现

    1. **对阶操作**:比较两个操作数的指数大小,对指数较小的操作数的尾数进行移位,使其阶码与另一个操作数相同。 2. **尾数相加**:对经过对阶操作后的尾数进行加法操作。 3. **规格化**:调整尾数的有效位数,并...

    ACM必做50题的解题-高精度

    高精度数值是指超过正常整数范围的数值,需要使用特殊的数据类型和算法来进行计算。 二、将小数转换成整数 在高精度计算中,需要将小数转换成整数,以便使用大数阶乘思想进行计算。例如,对于小数1.2345,可以将其...

    腾讯面试题目

    3. 操作系统:两个数相乘,小数点后位数没有限制,请写一个高精度算法。 4. 编程语言:写一个病毒。 5. 逻辑推理:有 A、B、C、D 四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10 分钟,只有一支...

    腾讯试题.pdf

    - 对于两个数相乘,小数点后位数没有限制的场景,高精度算法指的是能够在任意精度范围内进行计算的方法。 - 高精度算法通常需要自定义数据结构和运算规则,以处理传统数据类型(如int或long)无法支持的大数运算。 ...

    汇编语言实现浮点相乘的程序[借鉴].pdf

    - **乘法操作**:两个整数相乘,使用多次整数乘法和加法来模拟浮点数乘法。这可能涉及到位移和加法,以保持足够的精度。 - **处理小数位**:浮点数的小数部分可以被转换成整数的倍数,通过乘以10的适当次幂来实现。 ...

    大整数运算

    - **金融计算**: 在高精度财务计算中,确保小数点后多位的准确性。 - **科学计算**: 在天体物理学等领域的模拟计算中,可能涉及到极端数值。 #### 八、总结 大整数运算对于解决特定领域的问题至关重要。通过合理的...

    关于DSPQ格式的相关知识

    一个显著的问题是在进行乘法运算时,两个Q15格式的数相乘后,其结果将包含30位的小数部分,远超过原本的15位,从而导致溢出,即数值超出了可以表示的范围。这种溢出不仅会导致计算结果的不准确性,还可能引发更严重...

    腾讯面试题

    题目要求编写一个高精度算法来实现两个数的相乘,并且不限制小数点后的位数。这通常需要处理大数运算,可能涉及到字符串操作或使用特殊的大数库。 知识点四:逻辑和策略问题 有A、B、C、D四个人过桥的问题,这是一...

    总复习五年级数与代数PPT学习教案.pptx

    - **连乘、乘加、乘减**:在处理多个数相乘,或乘法与加法、减法混合的运算时,需按照运算顺序进行计算。 - **积的近似数**:求解乘积的近似值通常需要用到四舍五入规则,确保结果的精度。 - **小数乘小数**和**...

Global site tag (gtag.js) - Google Analytics