#include <iostream> using namespace std; /** * 大数相乘,使用字符串解决 */ /** * 将字符转换成数字 */ int ctoi(char ch){ if(ch < '0' || ch > '9'){ cout<<"transfer error"<<endl; return -1; } return ch-48; } /** * 将数字转换成字符 */ char itoc(int x){ if(x < 0 || x > 9){ cout<<"transfer error"<<endl; return -1; } return x+48; } /** * 逆置一个字符串 */ void reverseString(char *s){ int n = 0; char *p = s; while(*p++ != '\0') n++; for(int i=0;i<n/2;i++){ char tmp = *(s+i); *(s+i) = *(s+n-1-i); *(s+n-1-i) = tmp; } } /** * 大数相乘: 字符串的形式传入两个大数,以字符串的形式返回相乘结果。 * a * b = c * 从b的最低位开始,对其每一个字符,都与a的每个字符相乘,将结果存入空间w,进位存入more。 * 需要注意的是:b当前字符与a的某个字符相乘,结果没有产生进位(<10),但是加上上次的进位之 * 后才产生进位,这种情况需要注意。 */ char *big_multiply(char *a, char *b){ char *p = a; char *q = b; int more = 0; int max_end = 0; //分别求出b和a的长度(为了从右向左循环) int m = 0; while(*p++ != '\0') m++; //a length = m int n = 0; while(*q++ != '\0') n++; //b length = n //申请空间存放相乘结果(逆置,初始化为字符0) char *c = (char *)malloc(sizeof(char)*(m+n+1)); char *w = c; for(int k=0;k<m+n+1;k++) *w++ = '0'; int begin = 0; //每一轮结果存放的起始位置递增 for(int j=n-1;j>=0;j--){ //每个b的字符都和a的所有字符乘一次 w = c+begin; //每一轮,起点都往前移动一步 for(int i=m-1;i>=0;i--){ //a的每个字符 int v = ctoi(a[i])*ctoi(b[j]); //相乘 int tmp = ctoi(*w)+v%10+more; //三个部分相加 if(tmp > 9){ //特殊情况: 相加之后产生新的进位 *w++ = itoc(tmp%10); //再次对10取模再存入 more = v/10 + tmp/10; //加上相加产生的进位 } else{ //正常情况(三个部分相加没有产生进位) *w++ = itoc(tmp); //存入 more = v/10; //进位 } } if(more != 0) //检查是否有进位 *w++ = itoc(more); more = 0; //重置进位 begin++; //起点移动 } *w = '\0'; cout<<"result:"<<c<<endl; reverseString(c); //逆置 return c; } double big_pow(double x, int n){ if(n == 0) return 1; else if(n == 1) return x; else{ if(n % 2 == 0){ return big_pow(x, n/2) * big_pow(x, n/2); } else{ return big_pow(x, n/2) * big_pow(x, n/2+1); } } } int main(){ char *a = "123456"; char *b = "669"; cout<<big_multiply(a,b)<<endl; return 0; }
您还没有登录,请您登录后再发表评论
通过汇编语言实现大数相乘,作业,调试成功
两个超过计算机所能表示的数相乘,利用数组存储大数,进行相乘
实现简单的正数相乘,代码简单,大数只能用字符型来存储,因为int最大也就几万,所以要实现字符到整数之间的转换的。还有要进行反向存储数字,反向输出。具体问题在代码中有实现与说明
大数相乘,通用链表实现,可支持任意长度的整数相乘,对大数进行合理分段处理,运算效率很高。
普通的整数用64bit来表示,大约是4*(1000)^6,即4*10^18,也就说能实现最大数为18位的十进制数相乘。如果要实现100或更多位十进制相乘,怎么办呢?这个资源解决了这个问题。
那么如何实现两个大数相乘呢?我用JS实现了一下,代码如下: 代码如下: console.log(bigMut(“567”, “1234”)); // 699678 function bigMut(big, common) { big += “”; common += “”; if (big.length < ...
两个大数相乘-字符串实现两个大数相乘-字符串实现
数据结构课程设计之大数相乘求解,使用链表的求法,可以输入任意的一个大数
本程序实现两个100位以内的大整数相乘的算法。 大家可以借鉴一下,如果可以再改进一下就更好了。
分治法求两个大整数相乘C++实现。
利用分治法设计一个计算两个n位的大整数相乘的算法,要求计算时间低于O(n2)。支持不同位数大数的相乘。
1、大数相乘。要求实现两个十进制大整数的相乘(100位以上),输出乘法运算的结果。 2、结合Windows界面编程和浮点数编程,实现完善的计算器功能,支持浮点运算和三角函数等功能。 3、Windows界面风格实现两个文本...
在计算机语言中,整数最大可以设置为unsigned long类型的,但是表示有限,当涉及到两个大整数相乘的时候,会出现不能表示的情况,鉴于此编制此算法予以解决大整数相乘。本程序使用分治法实现,将n位二进制整数X和Y都...
大整数相乘,仅作参考。利用竖式的。不是分治算法的喔。
用c语言计算两大整数a,b相乘a,b (0,b^1000)
减治法大数相乘
大数乘法函数Multiply。 输入:两个任意长度的10进制整数序列字符串,如4567891234567890或者101。输出:一个10进制整数序列字符串,为所输入两个数的乘积,如4567891234567890*101=461357014691356890 。
用c语言实现两个大整数相乘,运行环境winTC开始输入第一个数的位数,之后输入第一个数,然后输入第二个数的位数,在输入第二个数
JAVA实现的两个特大整数相乘的算法,可以达到1000位数相乘。
相关推荐
通过汇编语言实现大数相乘,作业,调试成功
两个超过计算机所能表示的数相乘,利用数组存储大数,进行相乘
实现简单的正数相乘,代码简单,大数只能用字符型来存储,因为int最大也就几万,所以要实现字符到整数之间的转换的。还有要进行反向存储数字,反向输出。具体问题在代码中有实现与说明
大数相乘,通用链表实现,可支持任意长度的整数相乘,对大数进行合理分段处理,运算效率很高。
普通的整数用64bit来表示,大约是4*(1000)^6,即4*10^18,也就说能实现最大数为18位的十进制数相乘。如果要实现100或更多位十进制相乘,怎么办呢?这个资源解决了这个问题。
那么如何实现两个大数相乘呢?我用JS实现了一下,代码如下: 代码如下: console.log(bigMut(“567”, “1234”)); // 699678 function bigMut(big, common) { big += “”; common += “”; if (big.length < ...
两个大数相乘-字符串实现两个大数相乘-字符串实现
数据结构课程设计之大数相乘求解,使用链表的求法,可以输入任意的一个大数
本程序实现两个100位以内的大整数相乘的算法。 大家可以借鉴一下,如果可以再改进一下就更好了。
分治法求两个大整数相乘C++实现。
利用分治法设计一个计算两个n位的大整数相乘的算法,要求计算时间低于O(n2)。支持不同位数大数的相乘。
1、大数相乘。要求实现两个十进制大整数的相乘(100位以上),输出乘法运算的结果。 2、结合Windows界面编程和浮点数编程,实现完善的计算器功能,支持浮点运算和三角函数等功能。 3、Windows界面风格实现两个文本...
在计算机语言中,整数最大可以设置为unsigned long类型的,但是表示有限,当涉及到两个大整数相乘的时候,会出现不能表示的情况,鉴于此编制此算法予以解决大整数相乘。本程序使用分治法实现,将n位二进制整数X和Y都...
大整数相乘,仅作参考。利用竖式的。不是分治算法的喔。
用c语言计算两大整数a,b相乘a,b (0,b^1000)
减治法大数相乘
大数乘法函数Multiply。 输入:两个任意长度的10进制整数序列字符串,如4567891234567890或者101。输出:一个10进制整数序列字符串,为所输入两个数的乘积,如4567891234567890*101=461357014691356890 。
用c语言实现两个大整数相乘,运行环境winTC开始输入第一个数的位数,之后输入第一个数,然后输入第二个数的位数,在输入第二个数
JAVA实现的两个特大整数相乘的算法,可以达到1000位数相乘。