关于用字符串实现大整数的加法

byene 2015-06-20 01:23:51
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

void add(char a[100],char b[100])
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
int lena,lenb;
lena=strlen(a);
lenb=strlen(b);
if(lena<=lenb) swap(lena,lenb);
int times=lena;
int c[100];
memset(c,0,sizeof(c));
for(int i=times;i>0;i++)
{
c[i]=(a[i-1]-'0'+b[i-1]-'0');
if(c[i]>=10)
{
c[i]-=10;
c[i-1]+=1;
}
}
if(c[0]==1)
{
for(int i=0;i<times+1;i++)
printf("%d",c[i]);
}
else
{
for(int i=1;i<times+1;i++)
printf("%d",c[i]);
}
printf("\n");
}

int main()
{
char a[100];
char b[100];
scanf("%s%s",a,b);
add(a,b);
return 0;
}

请问是哪里错了 为什么没有输出?谢谢!
...全文
276 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-06-23
  • 打赏
  • 举报
回复
仅供参考:
#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
fly_dragon_fly 2015-06-23
  • 打赏
  • 举报
回复
需要单步调试一下吧, 说一下看到的问题 `1. memset(a,0,sizeof(a));这个a是指针,sizeof得到4, 就语句应该在scanf前使用 2. for(int i=times;i>0;i++) , i首先得到最大值, 然后还一直加, 应该是i--, 如果输入等长应该没问题,否则短的根本没有数字
辰岡墨竹 2015-06-20
  • 打赏
  • 举报
回复
因为这个数组里前面都是‘\0’,字符串碰到\0就结束了,printf打不出来。 你需要把\0替换成空格。

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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