首页 > 代码库 > C语言大数运算

C语言大数运算

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #define max 100//数字位数
 5 void add(char *s1,char *s2)//两位大于0的数字加法
 6 {
 7     int mun1[max+1]={0},mun2[max+1]={0},m,n,i=0,j=0;
 8     m=strlen(s1)-1;
 9     n=strlen(s2)-1;
10     for (i=0;m>=0;m--)//将字符串1转换为数字,并反序存入
11         mun1[i++]=s1[m]-0;
12     for (j=0;n>=0;n--)//将字符串2转换为数字,并反序存入
13         mun2[j++]=s2[n]-0;
14     for (i=0;(i<=strlen(s1)-1)|| (i<=strlen(s2)-1) ;i++)//运算
15     {
16         mun1[i]=(mun1[i]+mun2[i])%10;
17         mun1[i+1]+=(mun1[i]+mun2[i])/10;
18     }
19     for (i=max;(i>=0)&&(mun1[i]==0);i--);//定位第一个不等于0的数
20     for (;i>=0;i--)//输出答案
21     {
22         printf("%d",mun1[i]);
23     }
24     printf("\n");
25 }
26 void mul(char *s1,char *s2)//大于0的两位数乘法
27 {
28     int a[max]={0},b[max]={0},c[max+1]={0},i=0,j=0,m,n;
29     m=strlen(s1)-1;
30     n=strlen(s2)-1;
31     for (i=0;m>=0;m--)//将字符串1转换为数字,并反序存入
32         a[i++]=s1[m]-0;
33     for (j=0;n>=0;n--)//将字符串2转换为数字,并反序存入
34         b[j++]=s2[n]-0;
35     for (i=0;i<=strlen(s1);i++)//运算存入
36     {
37         for (j=0;j<=strlen(s2);j++)
38             c[i+j]+=a[i]*b[j];//重点
39     }
40     for (i=0;i<=max;i++)
41     {
42         c[i]=c[i]%10;
43         c[i+1]=c[i+1]+c[i]/10;
44     }
45     for (i=max;i>=0 && c[i]==0;i--);
46     for (;i>=0;i--)
47     {
48         printf("%d",c[i]);
49     }
50     printf("\n");
51 }
52 int main()
53 {
54     char s1[max],s2[max];
55     scanf("%s %s",s1,s2);
56 
57     mul(s1,s2);
58     add(s1,s2);
59     return 0;
60 }

 

C语言大数运算