怎么用数组完成两个超长的正整数乘法
找它的因数不就知道了!都是乘法
#include
#include
void f(char* from,char* to)
{
int i,n;
n=strlen(from);
for(i=0;i<n;i++)
to[n-1-i]=from[i];
to[n]='\0';
}
int main(int argc, char* argv[])
{
int i;
char a[101],b[101],c[101],d='0'; //声明1001个长度的数组,就能求1000位的加法
printf("enter two number:
");
scanf("%s",b);
scanf("%s",c);
f(b,a);
f(c,b);
for(i=0;a[i]!='\0'&&b[i]!='\0';i++)
if((a[i]+b[i]+d)%48>=10)
{
c[i]=(a[i]+b[i]+d)%48+38;
d='1';
}
else {
c[i]=(a[i]+b[i]+d)%48+48;
d='0';
}
if(a[i]!='\0')
{
for(;a[i]!='\0';i++)
if((a[i]+d)%48>=10)
{
c[i]=(a[i]+d)%48+38;
d='1';
}
else {
c[i]=(a[i]+d)%48+48;
d='0';
}
}
else if(b[i]!='\0')
{
for(;b[i]!='\0';i++)
if((b[i]+d)%48>=10)
{
c[i]=(b[i]+d)%48+38;
d='1';
}
else {
c[i]=(b[i]+d)%48+48;
d='0';
}
}
c[i]=d;
printf("sum is:
");
if(d=='0') for(i=i-1;i>=0;i--) printf("%c",c[i]);
else for(;i>=0;i--) printf("%c",c[i]);
system("pause");
return 0;
}
//例如:100011 1011101//程序中先输入被乘数和乘数的位数,然后动态申请空间,以字符的形式来处理长整数的每一位。//模拟计算机乘法的实现,将整数乘法转换为整数加法来实现。#include <stdio.h>//将数组元素左移x位,低位补0
void leftmove(char c[],int len,int x)
{
if(x==0)
return ;
else
{
for(int i=0;i<x;i++)
c[i+len]='0';
}
}//将数组元素右移x位,高位补0
void rightmove(char c[],int& len,int x)
{
if(x==0)
return ;
else
{
for(int i=len-1;i>=0;i--)
{
c[i+x]=c[i];
}
for(int j=0;j<x;j++)
{
c[j]='0';
}
}
len+=x;
}//模拟计算机计算两个数的乘法,通过将数组左移或右移,然后各位相加,得到乘积
void add(char a[],char s[],int& len)
{
int i;
int c=0; //进位
int temp;
for(i=len-1;i>=0;i--)
{
temp=(a[i]-'0')+(s[i]-'0')+c;
if(temp==1)
{
s[i]='1';
c=0;
}
if(temp==2)
{
s[i]='0';
c=1;
if(i==0)
{
for(int j=len-1;j>=0;j--) //最高位有进位
{
s[j+1]=s[j];
}
s[j+1]='1';
len+=1;
}
} }
}
int main()
{
int length,i;
printf("请输入被乘数、乘数的位数:\n");
int n1,n2;
scanf("%d%d",&n1,&n2);
char* a=new char[n1]; //被乘数
char* b=new char[n2]; //乘数 char* s=new char[n1+n2]; //积
for(i=0;i<n1+n2;i++) //初始化为0
s[i]='0'; length=n1;
printf("请输入被乘数、乘数(二进制表示):\n");
scanf("%s%s",a,b);
for(i=n2-1;i>=0;i--)
{
if((b[i]-'0')==1)
{
leftmove(a,n1,n1-1-i); //若为1,将数组a左移i位,低位补0
rightmove(s,length,n2-i-1); //将s数组右移i位,高位补0
add(a,s,length); ///将数组a各位+到s上。
}
}
for(int j=0;j<length;j++)
printf("%c",s[j]);
printf("\n"); return 0;
}
最简单的方法,就是模拟手算乘法,小学生都会的.
高精度算法。您是使用什么语言的呢。?
怎么用数组完成两个超长的正整数乘法
\/\/此程序实现了两个大整数的乘法,注:整数用二进制表示。即每一位都是0或1表示 \/\/例如:100011 1011101\/\/程序中先输入被乘数和乘数的位数,然后动态申请空间,以字符的形式来处理长整数的每一位。\/\/模拟计算机乘法的实现,将整数乘法转换为整数加法来实现。#include <stdio.h>\/\/将数组元素左移x位...
Java中有什么方法能使大于long 的两个数相乘???
建议自己写一个乘法函数去处理,采用字符数组存储你输入的要计算的两个数,结果也以字符数组给出。具体的计算可以按照它们的ASCII码进行计算,按10进制乘法规则,自己写一个函数。以前写过。
在C语言中如何实现两个256位数的乘法?
void a2d(int x[],char a[]){ int i,j;for(i=0;i<505;i++)x[i]=0;j=strlen(a)-1;for(i=0;j>=0;j--,i++)x[i]=a[j]-'0';} int my_len(int x[]){ int i;for(i=504;i>=0&&x[i]==0;i--);return i<0?0:i;} void multi(int x[],int y[]){ int...
如何在excel中实现两个数值的乘法和除法运算?
1、首先创建一个二维数组,然后全选整个数组后按住ctrl进行拖拽,可以实显数组的复制。2、打开后面版,找到数值中的复合运算icon,拖拽到后面板。3、为了对符合运算icon进行介绍,需要将上述动作再次做一次。4、打开后面版,将其中一个复合运算的右键菜单打开,点击:更改模式-乘。5、将上述模块按照下图的...
c++ 输入a,b两个整数,求a的b次方 我超了int的界 想到用字符串处理,但是...
两个大整数相乘更好的做法是用int数组实现,将大整数位数分段,每段用一个int实现,只需保证每段的平方不溢出即可。每段相乘结果超过段长的就向下一个int进位。该做法附加操作少,直接调用硬件的操作多,程序运行效率高。正常的做法是一个int表示多位,为了编程方便,一个int只表示一位,区别并不本质 ...
C语言超长整数乘法计算问题
36 那么 把6 留下 3 进到 前一位去 ;c[i+j+1] = c[i+j] \/ 10 + c[i+j+1]; 这句是向前进 十位 的 ;c[i+j] = c[i+j] % 10; 这句就是 留下 各位 ;这个不是跟乘法的思想是一样的嘛 每一位都要相乘嘛!就行 55 * 55 不是需要 乘 4 遍嘛!
大一c语言:用数组设计一个20位长整数,并实现用这个长整数进行加法或减法...
\/\/这是我之前写的一个大整数的加减乘的程序,先输入两个数的各位的值#include<stdio.h>#include<string.h>#include<stdlib.h>void putin(int *x,int *y,int a,int b){int i;for(i=0;i<a;i++){printf("输入x[%d]:",i);scanf("%d",&x[i]);}for(i=0;i...
求助一道pascal高精度乘法题:输入两个正整数m、n,输出他们的积...
--- c[1]c[2]...c[2n-1]c[2n]【算法分析】从低位开始乘:1.首先计算 a[1] a[2]... a[n-1] a[n]b[n]--- d[0]d[1] d[2]...d[n-1] d[n]得到中间结果,然后将d数组加到C数组中。2.再计算 a[1] a[2]... a[n-1] a[n]b[n-1]--- d[0]d...
Excel 数组相乘,到底怎么个乘法
1、行与行或者列与列相乘,2、行与列相乘。二、Excel 数组相乘方法、结果:1、行与行或者列与列相乘,两个数组的对应单元格相乘,得到一个新的数组 例如:C1=A1:A5*B1:B5 就{1;2;3;4;5}*{10;20;30;40;50}={10;40;90;160;250} A3=A1:E1*A2:E2 就是{1,2,3,4,5}*{10,20,...
高精度计算高精度乘法
高精度乘法的实现原理与基本的加法操作类似。其步骤如下:1. 首先,读入需要相乘的两个数s1和s2。2. 将这两个数分别分割成每四位一组,转换为整数数组a和b,并记录数组的长度k1和k2。3. 初始化一个变量i为数组b的最低位。4. 依次取出数组b中第i位与数组a相乘,将结果累加到数组c中。在累加...