标签:加法 logs class nbsp max int turn string fine
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 }
标签:加法 logs class nbsp max int turn string fine
原文地址:http://www.cnblogs.com/sy-me/p/6746533.html