大数相乘

来源:互联网 发布:购买域名后如何使用 编辑:程序博客网 时间:2024/05/21 15:42
#include <stdio.h>#include <stdlib.h>#include <string.h>#define N 100//将在数组中保存的字符串转成数字存到int数组中void turn(int *a,char *s){     int i;     char digit;      int len = strlen(s);     //将整形数组初始化     for(i = 0; i < N; ++i)           *(a + i) = 0; //将读入的字符串逐位存入整型数组     for(i = 0; i < len; ++i) { digit = *(s + i); int temp = digit-'0'; if(temp<0||temp>9) {printf("输入非法");return; } else *(a + len - 1 - i) = digit - '0';     }}//将数组a与数组b逐位相乘以后存入数组cvoid multiplication(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 - 1; ++i)     {           *(c + i + 1) += *(c + i)/10;//将十位上的数向前进位,并加上原来这个位上的数           *(c + i) = *(c + i)%10;     }}int main(){    int a[N],b[N],result[2*N];    char s1[N],s2[N];    int j = 2*N-1;    int i;    while(1){printf("请输入第一个大数(小于50位)s1=");scanf("%s",s1);printf("\n请输入第二个大数(小于50位)s2=");scanf("%s",s2);turn(a,s1);turn(b,s2);multiplication(a,b,result);    while(result[j] == 0){j--;}printf("\ns1*s2=");for(i = j;i >= 0; --i){printf("%d",result[i]);}printf("\n");}    return 0;}

0 0
原创粉丝点击