低端初学者大数相乘有关问题

低端菜鸟求助大数相乘问题
RT,下面程序是我用C做的大数相乘的计算。
逻辑上应该没什么问题,我在纸上推算过,可是程序得出的数字偏差很大~

基本思想就是每一位数字相乘,然后计算进位和余数,代码里有注释,大神们帮忙看下吧~
C/C++ code
#include <stdlib.h>
#include <stdio.h>
#include <string.h>


#define N 200

void move(int *a,char *s);//把大数s存入数组a
void mul(int *a,int *b,int *c);//将a*b的结果存入c

void move(int *a,char *s){
    int i,len;
    char ch;
    len = strlen(s);//获得s长度,循环会用到
    for(i = 0;i<N;i++){
        a[i] = 0;//全部初始化为0
    }
    //将s存入a
    for(i = 0;i<len;i++){
        ch = s[i];
        a[len-i-1] = ch-'0';//因为接受的是字符串,所以需要用ASCII码相减
    }
}

void mul(int *a, int *b,int *c){
    int i,j;
    for(i = 0;i<2*N;i++){
        c[i] = 0;
    }
    for(i = 0;i<N;i++)
        for(j = 0;j<N;j++)
        {
            c[i+j] += a[i]*b[j];//每一位相乘
        }
    for(i = 0;i<2*N;i++)
    {
        c[i+1] += c[i]/10;//获得进位的数
        c[i] += c[i]%10;//进位之后的余数
    }
}

int main(void){
    int a[N],b[N],c[2*N];
    char s1[N];
    char s2[N];
    int i,j = 2*N-1;
    printf("Please enter the first big number:");
    scanf("%s",s1);
    printf("\nPlease enter the second number:");
    scanf("%s",s2);
    move(a,s1);
    move(b,s2);
    
    mul(a,b,c);
    while(c[j] == 0){
        j--;
    }
    printf("\nResult:");
    for(i = j;i>=0;i--){
        printf("%d",c[i]);    
    }
    getchar();
    getchar();
    return 0;
}


关于大数相乘还有什么好的算法也请不吝赐教~嘿嘿。

------解决方案--------------------
c[i] += c[i]%10;//进位之后的余数
=>
c[i] = c[i]%10;//进位之后的余数