本文目录一览:
- 1、c语言 大整数乘法
- 2、c语言大整数乘法
- 3、C语言 大整数乘法 求代码
- 4、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;
你的程序里貌似很多地方这个都弄反了,改正后应该就没有问题了...