c语言用字符串求两个大整数相加,帮我看下这个代码(我自己写的),得不出结果

/*求两个大整数相加*/#include<stdio.h>#include<string.h>#defineN100intmain(){charinput1[N]={'0... /*求两个大整数相加
*/
#include<stdio.h>
#include<string.h>
#define N 100
int main()
{
char input1[N]={'0'}, input2[N]={'0'}, output[N+1]={'0'};
printf("请输入第一个大整数\n");
gets(input1);
printf("请输入第二个大整数\n");
gets(input2);
int a=0,i,k,m,n;
if(strlen(input1)>strlen(input2))
m=strlen(input2);
n=strlen(input1); //此时表示第一个数大
i=m-1;
k=n-1;
for(i,k;i>=0;i--,k--)
{
output[k+1]=(input2[i]+input1[k]+a)%10; //后一位相加赋值给结果的最后位,并依次向前推移,直到小数第一位为止a表示进位数1或0;
a=(input2[i]+input1[k]+a)/10;
}
for(k;k>=0;k--) //小的一个数加到第一位后,直接把大的一个数的一位数复制给结果的一位数,并依次向前推移
{
output[k]=(input1[k]+a)%10;
a=(input1[k]+a)/10;
}
if(a)
{
output[0]=a;
}
else
output[0]='\0';
//结果的第一位数等于a
if(strlen(input1)<strlen(input2))
m=strlen(input1);
n=strlen(input2);
i=m-1;
k=n-1;
for(i,k;i>=0;i--,k--)
{
output[k]=(input1[i]+input2[k]+a)%10;
a=(input1[i]+input2[k]+a)/10;
}
for(k;k>=0;k--)
{
output[k+1]=(input2[k]+a)%10;
a=(input2[k]+a)/10;
}
if(a)
{
output[0]=a;
}
else
output[0]='\0';
puts(output);
return 0;
}
展开
 我来答
wchyumo2011
推荐于2017-09-30 · TA获得超过2万个赞
知道大有可为答主
回答量:5810
采纳率:79%
帮助的人:2714万
展开全部
#include<stdio.h>
#include<string.h>
#define N 100
int main()
{
 char input1[N]={'0'}, input2[N]={'0'};
 int output[N+1]={0};
 printf("请输入第一个大整数\n");
 gets(input1);
 printf("请输入第二个大整数\n");
 gets(input2);
 int a=0,i,k,m,n;
 if(strlen(input1)>=strlen(input2)){
        m=strlen(input2);
        n=strlen(input1);                           //此时表示第一个数大
        i=m-1;
        k=n-1;
        for(i,k;i>=0;i--,k--)
        {
            output[k+1]=(input2[i]-'0'+input1[k]-'0'+a)%10;  //后一位相加赋值给结果的最后位,并依次向前推移,直到小数第一位为止a表示进位数1或0;
            a=(input2[i]-'0'+input1[k]-'0'+a)/10;
        }
        for(k;k>=0;k--)                             //小的一个数加到第一位后,直接把大的一个数的一位数复制给结果的一位数,并依次向前推移
        {
            output[k+1]=(input1[k]-'0'+a)%10;/////////////
            a=(input1[k]-'0'+a)/10;
        }
        if(a)
        {
           output[k+1]=a;
        }
        else{
            output[k+1]=0;
        }
    }
                                      //结果的第一位数等于a
      else if(strlen(input1)<strlen(input2)){
        m=strlen(input1);
        n=strlen(input2);
        i=m-1;
        k=n-1;
        for(i,k;i>=0;i--,k--)
        {
            output[k+1]=(input1[i]-'0'+input2[k]-'0'+a)%10;
            a=(input1[i]-'0'+input2[k]-'0'+a)/10;
        }
        for(k;k>=0;k--)
        {
           output[k+1]=(input2[k]-'0'+a)%10;
            a=(input2[k]-'0'+a)/10;
        }
         if(a)
        {
           output[k+1]=a;
        }
        else{
            output[k+1]=0;
        }
        //puts(output);
      }
      for (i = (output[0] == 0 ? 1 : 0); i <= n; ++i){
        printf ("%d", output[i]);
      }
      return 0;
}
TableDI
2024-07-18 广告
Excel一键自动匹配,在线免费vlookup工具,3步完成!Excel在线免费vlookup工具,点击93步自动完成vlookup匹配,无需手写公式,免费使用!... 点击进入详情页
本回答由TableDI提供
upupu之歌
2015-05-10 · TA获得超过101个赞
知道答主
回答量:49
采纳率:0%
帮助的人:18.1万
展开全部
#include<stdio.h>
#include<string.h>
#define N 100
int main()
{
int a=1,i,k,m,n;
int output[N+1]={0};
char input1[N]={'0'}, input2[N]={'0'},p[N]={'0'};
printf("请输入第一个大整数\n");
gets(input1);
printf("请输入第二个大整数\n");
gets(input2);
n=strlen(input1);
m=strlen(input2);
if(m>n)
{
for(i=0;i<=m;i++)
{
p[i]=input1[i];
input1[i]=input2[i];
input2[i]=p[i];
} //交换,使input1最长
m+=n;n=m-n;m-=n;//交换,使n最大
}
for(i=n-1,k=m-1;i>=0;i--,k--)//计算和
{
if(k>=0)output[i+1]+=(input1[i]-'0'+input2[k]-'0');
else output[i+1]+=(input1[i]-'0');
if(output[i+1]>9){output[i]=1;output[i+1]-=10;}
}
if(output[0])a=0;//假如最大位(output[0])不等于0,则从最大位开始输出
for(i=a;i<=n;i++)printf("%d",output[i]);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式