鱼C论坛

 找回密码
 立即注册
查看: 1922|回复: 4

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

[复制链接]
发表于 2015-11-7 21:22:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

}弄了挺久不知错哪里了 求大侠指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-11-13 18:46:48 | 显示全部楼层
#include<stdio.h>
#include<string.h>
int main()
{
        int i, j, k, m, n;
        char a[81],b[81],c[81];  直接给c[81]={0},下面的for循环就没必要了
        for(i=0;i<80;i++)
                c[i]=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[i]=(c[i]+a[m]+b[n])%10;  //这一堆实在是搞不懂 ,为何取余10?
                if(c[i]+a[m]+b[n]>=10)
                        c[i-1]=c[i-1]+1;
      
        }//输入到M和N共有的位数
        if(m>n)
        {
                for(;;)
                {
                        i--;   
                        if(i<0)
                                break;
                        m=m-1;
                        c[i]=a[m];
                }
        
        }
        if(n>m)
        {
        for(;;)
                {
                        i--;
                        if(i<1)
                                break;
                        n=n-1;
                        c[i]=b[n];
                }
        
        }//输入其余位数
        if(c[0]==1)//输出全部,若首位为1,则多一位
                printf("1");
        for(i=1;i<=k;i++)
        printf("%d",c[i]);   //应该%c

}弄了挺久不知错哪里了 求大侠指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-4-10 03:31:39 | 显示全部楼层
学习下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-12 15:41:01 From FishC Mobile | 显示全部楼层
你的数组为char.还有。如果最高位不为零,则输出数据吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-12 23:13:54 | 显示全部楼层
已经解决了就添加为解决了   路过的有疑问的下面是正确运行的代码了
#include<stdio.h>
#include<string.h>
int main()
{
   char c[81];
   int i,j,k=0,m,n,max,a[80]={0},b[80]={0},sum[100]={0};
   gets(c);
   m=strlen(c);
   for(i=0,j=m-1;j>=0;i++,j--)
   {
       a[i]=c[j]-48;
   }
   gets(c);
   n=strlen(c);
   for(i=0,j=n-1;j>=0;i++,j--)
   {
       b[i]=c[j]-48;
   }
  max=m;
  if(m<n)
  max=n;

  for(i=0;i<=max;i++)
  {
      sum[i]=(a[i]+b[i]+k)%10;
      k=(a[i]+b[i]+k)/10;
  }
  if(sum[max]>0)
  printf("%d",sum[max]);
  for(i=max-1;i>=0;i--)
  printf("%d",sum[i]);
  return 0;
  }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 22:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表