简单的大数相加

qq_33689013 2016-01-22 10:26:30

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char a[100],b[100];
int c[100]={0},d[100]={0},sum[100]={0};
int i,j=0,k;
gets(a);
gets(b);
int len1=0,len2=0;
len1=strlen(a);
len2=strlen(b);
for(i=len1-1;i>=0;i--)
{
c[j++]=a[i]-'0';
}
j=0;
for(i=len2-1;i>=0;i--)
{
d[j++]=b[i]-'0';
}
if(len1>=len2)
for(i=0;i<len1;i++)
{
sum[i]=c[i]+d[i];

if(sum[i]>9)
{ sum[i]=sum[i]-10;
sum[i+1]=sum[i+1]+1;}
if(sum[len1-1]>9)
{
for(i=len1-1;i>=0;i--)
{
sum[i]=sum[i-1];
}
sum[len1]=1;
len1++;
}
}
else
for(i=0;i<len2;i--)
{
sum[i]=c[i]+d[i];
if(sum[i]>9)
{
sum[i]=sum[i]-10;
sum[i+1]++;
}
if(sum[len2-1]>9)
{
for(i=len2-1;i>=0;i--)
{
sum[i]=sum[i-1];
}
sum[len2]=1;
len2++;
}

}
if(len1>len2)
for(i=len1-1;i>=0;i--)
{
printf("%d",sum[i]);
}
else
for(i=len2-1;i>=0;i--)
{
printf("%d",sum[i]);
}

}
该问题是当sum[i]>9时比他大一位的数不会加一

...全文
163 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-01-25
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
#include <string.h>
#define MAXLEN 1000
char a1[MAXLEN];
char a2[MAXLEN];
static int v1[MAXLEN];
static int v2[MAXLEN];
static int v3[MAXLEN];
int i,j,n,L,z;
void main(void) {
    scanf("%d",&n);
    for (j=0;j<n;j++) {
        scanf("%s%s",a1,a2);

        L=strlen(a1);
        for (i=0;i<L;i++) v1[i]=a1[L-1-i]-'0';

        L=strlen(a2);
        for (i=0;i<L;i++) v2[i]=a2[L-1-i]-'0';

        for (i=0;i<MAXLEN;i++) v3[i]=v1[i]+v2[i];

        for (i=0;i<MAXLEN;i++) {
            if (v3[i]>=10) {
                v3[i+1]+=v3[i]/10;
                v3[i]=v3[i]%10;
            }
        }

        printf("Case %d:\n", j+1);
        printf("%s + %s = ", a1, a2);

        z=0;
        for (i=MAXLEN-1;i>=0;i--) {
            if (z==0) {
                if (v3[i]!=0) {
                    printf("%d",v3[i]);
                    z=1;
                }
            } else {
                printf("%d",v3[i]);
            }
        }
        if (z==0) printf("0");

        printf("\n");
    }
}
//Sample Input
//3
//0 0
//1 2
//112233445566778899 998877665544332211
//
//Sample Output
//Case 1:
//0 + 0 = 0
//Case 2:
//1 + 2 = 3
//Case 3:
//112233445566778899 + 998877665544332211 = 1111111111111111110
wang0635 2016-01-24
  • 打赏
  • 举报
回复
引用 3 楼 qq_33689013 的回复:
[quote=引用 2 楼 wang0635 的回复:] 在 for(i=len2-1;i>=0;i--) { d[j++]=b[i]-'0'; } 之后的一部分,逻辑上应该是这样的:

    int		carry = 0;
    if (len1 >= len2)
    {
        for (i = 0; i <= len1; i++)
        {
            if (i > len2)
				d[i] = 0;

            sum[i] = c[i] + d[i] + carry;
            carry = sum[i] > 9;

            if (carry)
                sum[i] -= 10;
        }
         if (sum[len1] != 0)
			len1++;
    }
    else
    {
        ....
    }
后面略
这样改貌似没有用,为什么这样,哪出错了,改完后反而运算全出错了 [[/quote] else 后的也要类似改
YXTS122 2016-01-23
  • 打赏
  • 举报
回复
YXTS122 2016-01-23
  • 打赏
  • 举报
回复
 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    char a[100],b[100];
    int c[100]={0},d[100]={0},sum[100]={0};
    int i,j=0;
    gets(a);
    gets(b);
    int len1=0,len2=0;
    len1=strlen(a);
    len2=strlen(b);
    for(i=len1-1;i>=0;i--)
    {
        c[j++]=a[i]-'0';
    }
    j=0;
    for(i=len2-1;i>=0;i--)
    {
        d[j++]=b[i]-'0';
    }
    if(len1>=len2)
    for(i=0;i<len1;i++)
    {
        sum[i]=sum[i]+c[i]+d[i];
		if(sum[i]>9)
		{
			if(i==len1-1)
				len1++;
			sum[i]=sum[i]-10;
            sum[i+1]++;
		}
    }
    else
    for(i=0;i<len2;i++)
    {
        sum[i]=sum[i]+c[i]+d[i];
		if(sum[i]>9)
		{
			if(i==len2-1)
				len2++;
			sum[i]=sum[i]-10;
            sum[i+1]++;
		}
    }
      if(len1>len2)
      for(i=len1-1;i>=0;i--)
      {
          printf("%d",sum[i]);
      }
      else
      for(i=len2-1;i>=0;i--)
      {
          printf("%d",sum[i]);
      }
	  system("pause");
	  return 0;
      
} 
qq_33689013 2016-01-23
  • 打赏
  • 举报
回复
引用 2 楼 wang0635 的回复:
在 for(i=len2-1;i>=0;i--) { d[j++]=b[i]-'0'; } 之后的一部分,逻辑上应该是这样的:

    int		carry = 0;
    if (len1 >= len2)
    {
        for (i = 0; i <= len1; i++)
        {
            if (i > len2)
				d[i] = 0;

            sum[i] = c[i] + d[i] + carry;
            carry = sum[i] > 9;

            if (carry)
                sum[i] -= 10;
        }
         if (sum[len1] != 0)
			len1++;
    }
    else
    {
        ....
    }
后面略
这样改貌似没有用,为什么这样,哪出错了,改完后反而运算全出错了 [
wang0635 2016-01-23
  • 打赏
  • 举报
回复
在 for(i=len2-1;i>=0;i--) { d[j++]=b[i]-'0'; } 之后的一部分,逻辑上应该是这样的:

    int		carry = 0;
    if (len1 >= len2)
    {
        for (i = 0; i <= len1; i++)
        {
            if (i > len2)
				d[i] = 0;

            sum[i] = c[i] + d[i] + carry;
            carry = sum[i] > 9;

            if (carry)
                sum[i] -= 10;
        }
         if (sum[len1] != 0)
			len1++;
    }
    else
    {
        ....
    }
后面略

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧