forest_mouse 发表于 2015-11-7 21:22:22

两个很大的整数相加求和··········求大侠

#include<stdio.h>
#include<string.h>
int main()
{
        int i, j, k, m, n;
        char a,b,c;
        for(i=0;i<80;i++)
                c=0;
        gets(a);
        gets(b);
        m=strlen(a);
        n=strlen(b);
        k=m;//求最长
        if(n>m)
                k=n;
    for(i=k;i>=1&&(m>=0&&n>=0);i--,m--,n--)
        {
                c=(c+a+b)%10;
                if(c+a+b>=10)
                        c=c+1;
      
        }//输入到M和N共有的位数
        if(m>n)
        {
                for(;;)
                {
                        i--;
                        if(i<0)
                                break;
                        m=m-1;
                        c=a;
                }
       
        }
        if(n>m)
        {
        for(;;)
                {
                        i--;
                        if(i<1)
                                break;
                        n=n-1;
                        c=b;
                }
       
        }//输入其余位数
        if(c==1)//输出全部,若首位为1,则多一位
                printf("1");
        for(i=1;i<=k;i++)
        printf("%d",c);

}弄了挺久不知错哪里了 求大侠指点

q312102408 发表于 2015-11-13 18:46:48

#include<stdio.h>
#include<string.h>
int main()
{
      int i, j, k, m, n;
      char a,b,c;直接给c={0},下面的for循环就没必要了
      for(i=0;i<80;i++)
                c=0;
      gets(a);
      gets(b);
      m=strlen(a);
      n=strlen(b);
      k=m;//求最长
      if(n>m)
                k=n;
    for(i=k;i>=1&&(m>=0&&n>=0);i--,m--,n--)
      {
                c=(c+a+b)%10;//这一堆实在是搞不懂 ,为何取余10?
                if(c+a+b>=10)
                        c=c+1;
      
      }//输入到M和N共有的位数
      if(m>n)
      {
                for(;;)
                {
                        i--;   
                        if(i<0)
                              break;
                        m=m-1;
                        c=a;
                }
      
      }
      if(n>m)
      {
      for(;;)
                {
                        i--;
                        if(i<1)
                              break;
                        n=n-1;
                        c=b;
                }
      
      }//输入其余位数
      if(c==1)//输出全部,若首位为1,则多一位
                printf("1");
      for(i=1;i<=k;i++)
      printf("%d",c);   //应该%c

}弄了挺久不知错哪里了 求大侠指点

xls6688 发表于 2016-4-10 03:31:39

学习下

zhuozi 发表于 2016-4-12 15:41:01

你的数组为char.还有。如果最高位不为零,则输出数据吧

forest_mouse 发表于 2016-4-12 23:13:54

已经解决了就添加为解决了   路过的有疑问的下面是正确运行的代码了
#include<stdio.h>
#include<string.h>
int main()
{
   char c;
   int i,j,k=0,m,n,max,a={0},b={0},sum={0};
   gets(c);
   m=strlen(c);
   for(i=0,j=m-1;j>=0;i++,j--)
   {
       a=c-48;
   }
   gets(c);
   n=strlen(c);
   for(i=0,j=n-1;j>=0;i++,j--)
   {
       b=c-48;
   }
max=m;
if(m<n)
max=n;

for(i=0;i<=max;i++)
{
      sum=(a+b+k)%10;
      k=(a+b+k)/10;
}
if(sum>0)
printf("%d",sum);
for(i=max-1;i>=0;i--)
printf("%d",sum);
return 0;
}
页: [1]
查看完整版本: 两个很大的整数相加求和··········求大侠