大整数的加法

来源:互联网 发布:淘宝如何退货 编辑:程序博客网 时间:2024/04/30 15:33

问题:

实现30位以内的大整数的加法

#include <stdio.h>#include <string.h>int main(){char s1[50],s2[50];int a[50]={0},b[50]={0},c[50]={0},m,n,q,k,i;printf("请输入两个大整数并以回车键表示输入结束:\n");gets(s1);//获得字符串形式的大整数gets(s2);m=strlen(s1);//m等于字符串的长度n=strlen(s2);if(m<n){  k=n;}else{  k=m;//使k等于大的数  q=k;}   for(i=0;i<m;k--,i++)   a[k]=s1[m-1-i]-'0';//s1本来是字符,减去0之后才变成数字   for(k=q,i=0;i<n;k--,i++)   b[k]=s2[n-1-i]-'0';   printf("\n");//上面两个的操作是将两个char型的字符串转变成int数组里面的数   for(i=q;i>=0;i--){    c[i]=a[i]+b[i];//两数组相加把值赋给另一个数组     if(c[i]>=10)    {    c[i]=c[i]-10;    c[i-1]++;    }//考虑到两数相加会出现大于10要进位的情况}  printf("两大整数相加结果是:\n");  if(c[0]!=0)//因为之前防止多出来一个所以增加了一个,要保证增加出来的那个不要输出0;  {      for(i=0;i<=q;i++)      printf("%d",c[i]);  }  else  {    for(i=1;i<=q;i++)    printf("%d",c[i]);}    printf("\n");    return 0;   }



运行结果:

0 0