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 }