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+1]+=(mun1[i]+mun2[i])/10;
17         mun1[i]=(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+1]=c[i+1]+c[i]/10;
43         c[i]=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 }

 

转载于:https://www.cnblogs.com/sy-me/p/6746533.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值