您的位置:

大整数乘法c语言代码注释,大整数加法C语言

本文目录一览:

c语言 大整数乘法

#include stdio.h

#includestring.h

int main()

{

int i,j,k=0;

char a[201]="0",b[201]="0",c[401]="0"; //这里将c[0]设为‘0’,影响到下面输入

scanf("%s%s",a,b);

for (i=0;i=strlen(a)-1;i++)

for (j=0;j=strlen(b)-1;j++)

{c[i+j+1]+=(a[i]-'0')*(b[j]-'0');}

k=(strlen(a)+strlen(b)-1);

for (;k=1;k--)

{

c[k-1]+=c[k]/10;

c[k]=c[k]%10; //这一步会将c[k]破坏,所以倒转

}

if(c[0]!='0') //若最高位为0,则不输出;

printf("%c",c[0]);

j=strlen(a)+strlen(b);

for (i=1;ij;i++)

{

printf("%d",c[i]);

}

return 0;

}

======================================

系统报错的原因是c[1]是char型,不是字符串数组,要用%c而是%s,我想你是把i写成了1了

c语言大整数乘法

dc这个函数里面连b这个参数都没有使用,这也能出结果...,

if(z[0]='0')continue 也写错了

不是打击你,你的代码太滥了,实在不想去找错误,给你我以前写的代码吧,你自己整理一下

#include stdio.h

int mulx(char * a,int b,char * r,int d);

void init(char * s);

char buf1[4*1024];

char buf2[4*1024];

char buf3[4*1024];

int main()

{

char * a;

char * b;

char * r;

char * t;

int d;

int i;

a = buf1;

b = buf2;

r = buf3;

init(NULL);

while(scanf("%s %d",a,d)!=EOF)

{

mulx(a,d,r,10);

printf("%s\n",r);

}

return 0;

}

char c2d[256]; //字符转换成数字

char * charset; //代表数字的字符

/*功能:设置使用那些字符表示数字,默认的为"0123456789ABCDEF"*/

/*参数:*/

/*返回值:*/

void init(char * s)

{

int i;

if(s==NULL)

charset = "0123456789ABCDEF";

else

charset = s;

for(i=0;i256;i++)

c2d[i] = 0;

for(i=0;charset[i];i++)

c2d[charset[i]] = i;

}

/*功能:清除前导零*/

/*参数:需要清楚的数字*/

/*返回值:清零后数字的位数*/

int clearZeros(char * a)

{

int i,j;

for(i=0;a[i]==charset[0];i++);

for(j=0;a[i];i++,j++)

a[j] = a[i];

a[j] = 0;

if(j==0)

{

a[j++] = charset[0];

a[j] = 0;

}

return j;

}

/*功能:乘,用于进制转换之类*/

/*参数:a 和 b 分别为乘数,结果保存到 r , d 为使用的进制*/

/*注意:r 可以等于 a , b一定要小于d, 如果被乘数有前导0 则结果也会有前导0*/

/*返回值:结果的位数*/

int mulx(char * a,int b,char * r,int d)

{

int i,j,k,len;

int c,t;

if(r==NULL)

r = a;

for(i=0;a[i];i++);

len = k = i;

for(c=0,i--,r[k--]=0;i=0 ;i--,k--)

{

t = c2d[a[i]] * b + c ;

c = t/d;

r[k] = charset[t%d];

}

if(c)

{

for(i=len,j=++len;i=0;i--,j--)

r[j] = r[i];

r[0]=charset[c];

}

return len;

}

C语言 大整数乘法 求代码

#include stdio.h #include string.h #define Maxline 300 void main() { void mul(char str1[],char str2[]); char str1[Maxline],str2[Maxline]; scanf("%s%s",str1,str2); mul(str1,str2); } void mul(char str1[],char str2[]) { int i,j,length1,length2,tag; int num1[Maxline],num2[Maxline],num3[Maxline]; length1=strlen(str1); length2=strlen(str2); for(i=0;iMaxline;i++) { num1[i]=0; num2[i]=0; num3[i]=0; } j=0; for(i=length1-1;i=0;i--) { num1[j]=str1[i]-'0'; j++; } j=0; for(i=length2-1;i=0;i--) { num2[j]=str2[i]-'0'; j++; } for(j=0;jlength2;j++) for(i=0;ilength1;i++) { num3[i+j]+=num1[i]*num2[j]; while(num3[i+j]=10) { num3[i+j]-=10; num3[i+j+1]++; } } for(i=Maxline-1;i=0;i--) { if(num3[i]!=0) { tag=i; break; } } for(i=tag;i=0;i--) { printf("%d",num3[i]); } printf("\n"); }

c语言大整数的乘法

nums[]为指针变量数组

nums[i]=j仅能表示将nums[i]存储的地址改为了j

若想修改其值,需加*,即*nums[i]=j;

或nums[i]=j;

你的程序里貌似很多地方这个都弄反了,改正后应该就没有问题了...