首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

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

2012-11-10 
低端菜鸟求助大数相乘问题RT,下面程序是我用C做的大数相乘的计算。逻辑上应该没什么问题,我在纸上推算过,可

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

基本思想就是每一位数字相乘,然后计算进位和余数,代码里有注释,大神们帮忙看下吧~

C/C++ code
#include <stdlib.h>#include <stdio.h>#include <string.h>#define N 200void move(int *a,char *s);//把大数s存入数组avoid mul(int *a,int *b,int *c);//将a*b的结果存入cvoid 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;//进位之后的余数

热点排行