高精度乘法C语言帮忙看一下有什么不对

#include<stdio.h>#include<string.h>intmain(){chara[1010],b[1010];intal[1010],bl[1010]... #include <stdio.h>
#include <string.h>

int main() {
char a[1010], b[1010];
int al[1010], bl[1010], c[2010];
int i, j, la, lb;
scanf("%s%s", a, b);
la = strlen(a);
lb = strlen(b);
for (i = 0; i < la; i = i + 1) al[la - 1 - i] = a[i] - '0';
for (i = 0; i < lb; i = i + 1) bl[lb - 1 - i] = b[i] - '0';
for (i = 0; i < la; i = i + 1) {
for (j = 0; j < lb; j = j + 1) {
c[i + j] = al[i] * bl[j] + c[i + j];
}
}
for (i = 0; i < la + lb - 1; i = i + 1) {
c[i + 1] += c[i] / 10;
c[i] = c[i] % 10;
}
if (c[la + lb - 2] < 10) {
i = la + lb - 2;
} else if (c[la + lb - 2] <100) {
i = la + lb - 1;
c[la + lb - 1] = c[la + lb - 2] / 10;
c[la + lb - 2] = c[la + lb - 2] % 10;
} else if (c[la + lb - 2] < 1000) {
i = la + lb;
c[la + lb] = c[la + lb - 2] / 100;
c[la + lb - 1] = c[la + lb - 2] / 10 - 10 * c[la + lb];
c[la + lb - 2] = c[la + lb - 2] % 100;
} else if (c[la + lb - 2] < 10000) {
i = la + lb + 1;
c[la + lb + 1] = c[la + lb - 2] / 1000;
c[la + lb] = c[la + lb - 2] / 100 - 10 * c[la + lb + 1];
c[la + lb - 1] = c[la + lb - 2] % 100 / 10;
c[la + lb - 2] = c[la + lb - 2] %1000;
} else {
i = la + lb + 2;
c[la + lb + 2] = c[la + lb - 2] / 10000;
c[la + lb + 1] = c[la + lb - 2] % 10000 / 1000;
c[la + lb] = c[la + lb - 2] % 1000 / 100;
c[la + lb - 1] = c[la + lb - 2] % 100 / 10;
c[la + lb - 2] = c[la + lb - 2] % 10;
}
for (j = i; j >= 0; j = j - 1) printf("%d", c[j]);
printf("\n");
return 0;
}
总是少一个数
展开
 我来答
听不清啊
高粉答主

推荐于2016-10-29 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:2亿
展开全部

#include <stdio.h>

#include <string.h>


int main() {

    char a[1010], b[1010];

    int al[1010]={0}, bl[1010]={0}, c[2010]={0};

    int i, j, la, lb;

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

printf("%s * %s = ",a,b);

    la = strlen(a);

    lb = strlen(b);

    for (i = 0; i < la; i = i + 1) al[la - 1 - i] = a[i] - '0';

    for (i = 0; i < lb; i = i + 1) bl[lb - 1 - i] = b[i] - '0';

    for (i = 0; i < la; i = i + 1) {

        for (j = 0; j < lb; j = j + 1) {

            c[i + j] = al[i] * bl[j] + c[i + j];

        }

    }

    for (i = 0; i <= la + lb - 1; i = i + 1) {

        c[i + 1] += c[i] / 10;

        c[i] = c[i] % 10;

    }

    while(c[i]==0)i--;

    for (j = i; j >= 0; j = j - 1) printf("%d", c[j]);

    printf("\n");

getch();

    return 0;

}

追问
那我那个为什么在数大的时候总是少一位那?
追答
你那个太烦了,实在看不懂。。。
不只是少一位吧,a,b,c数组都没有初始化
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式