c语言大整数乘法

我要求一个大数和一个一位数(0->10)的积,
代码如下:
#include<stdio.h>
#define H 10
char *dc(char*a,char b);
void main()
{
char a[H],b,*c=a;
scanf("%s,%c",a,&b);
dc(c,b);
printf("%s\n%c\n",a,b);
}
char *dc(char *a,char b)
{
int y=0,x,z[H],i,j,k=0;
for(i=0;;i++)
if(a[i]=='\0')break;
for(j=i-1;j>=0;j--)
{
x=(a[j]-'0')*(i-'0');
x=x+y;
z[i+1]=x%10+'0';
y=x/10;
z[j]=y+'0';
}
for(j=0;j<i;j++)
{
if(z[0]='0')continue;
a[k++]=z[j];
}
a[k]='\0';
return a;
}
为什么不出结果啊

#include<stdio.h>
#include<string.h>

void chengfa(char *a,char*b)
{
char c[10000];
int fuhao1,fuhao2;
if(a[0] == '-' || a[0] == '+') {
if(a[0] == '-')
fuhao1 = -1;
else fuhao1 = 1;
strcpy(c,a+1);
strcpy(a,c);
}
if(b[0] == '-' || b[0] == '+') {
if(b[0] == '-')
fuhao2 = -1;
else fuhao2 = 1;
strcpy(c,b+1);
strcpy(b,c);
}
int i , j;
for(i = 0; i< 10000;i++){
c[i] = '0';
}
int lena = strlen(a);
int lenb = strlen(b);
for(i = lena-1;i >=0;i--){
int k = 0;
for(j = lenb-1;j >=0;j--) {
char l = c[i+j+1];
c[i+j+1] = (c[i+j+1]-'0'+(b[j]-'0')*(a[i]-'0')+k)%10+'0';
k = (l-'0'+(b[j]-'0') * (a[i] -'0')+k)/10;
}
if(k!= 0) c[i] += k;
}
i = 0;
j = 0;
while(c[i] == '0') i++;
while(i <= lena+lenb-1) {
a[j] = c[i];
j ++;
i ++;
}
a[j] = '\0';
if(a[0] == '\0') a[0] = '0',a[1] = '\0';
if(fuhao1*fuhao2 == -1 && a[0] !='0') {
strcpy(c,a);
a[0] = '-';
a[1] = '\0';
strcat(a,c);
}
}

int main()
{
char a[10000],b[10000];
while(scanf("%s %s",a,b) == 2) {
chengfa(a,b);
printf("%s\n",a);
}

}
/*
//测试数据
3 4
12
1782362317836127863178 5
8911811589180639315890
2364782367834627864826 23478962483263478
55522636495472201715228381403526624828
*/
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-08-19
scanf("%s%s",&a,&b);
我学两天C直接就学JAVA了。
说下我的看法吧。
a[i]-'0'
//a[i]比如i为10你里面都没赋值这个值我觉得是随机的,因为操作系统与编译器没必要对于所引用的地址进行操作。
而且减'0'虽然'0'可以转化成asc2码,但是这样做应该不行吧。。。
或者相乘超过了2的8次(c[i+j+1]不能存放这么多位,地址溢出)。