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

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;
}

请问是哪里错了 为什么没有输出?谢谢!
...全文
331 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替换成空格。
内容概要:本文档介绍了一个基于Simulink的二自由度车辆被动悬架双质量(四分之一车)仿真模型,结合Koopman理论进行非线性系统的线性化识别与动力学分析。该模型聚焦于车辆悬架系统在垂向振动、悬挂空间利用及轮胎接地性能等方面的表现,旨在深入研究悬架系统的动态响应特性与减振性能。通过将复杂的非线性系统转化为近似的线性形式,便于应用现代控制理论进行系统辨识与降阶建模,从而为悬架参数优化提供理论依据和技术支持。文档还指出,该资源是MATLAB/Simulink系列科研仿真支持的一部分,涵盖电力系统、路径规划、机器学习、信号处理等多个工程技术领域。; 适合人群:面向车辆工程、机械电子、自动化及相关专业的研究生、科研人员,以及具备一定MATLAB/Simulink仿真基础的工程技术人员。; 使用场景及目标:①开展车辆悬架系统的动力学建模与仿真分析;②应用Koopman理论对非线性车辆系统进行数据驱动的线性化辨识与降阶处理;③优化悬架刚度与阻尼参数以提升乘坐舒适性与行驶安全性;④作为高校研究生课程或科研项目的教学案例,支撑高等动力学与控制理论的教学与实践。; 阅读建议:建议读者结合文中提供的完整资源下载渠道(如公众号“荔枝科研社”及百度网盘链接)获取配套的Simulink模型与仿真代码,以便进行实际操作、结果复现与参数调试,同时可参考同系列其他仿真案例进行交叉学习与研究拓展。
源码下载地址: https://pan.quark.cn/s/8bef45508eda ISO15765系列协议在汽车电子领域中扮演着关键角色,它被广泛采纳用于规范车载网络系统与外部设备之间的通信过程,特别是在诊断信息以及数据交换方面。这一系列协议是由国际标准化组织(ISO)负责制定,其根本目的在于保证不同汽车制造商所提供的诊断设备之间能够实现良好的互操作性,从而有效提升汽车维修、检测以及相关服务的整体效率。以下内容将就ISO15765协议展开详尽的阐述:1. **ISO 15765-1 2011**:作为ISO15765系列的基础构成,该部分主要明确了传输层面的协议细节。它具体界定了数据链路层(DLL)和物理层(PHY)之间的接口关系,并详细说明了用于诊断数据传输的帧格式设计以及错误检测的实施机制。此标准包含了适用于不同传输速度的通信规范,例如104kbps和250kbps的控制器区域网络(CAN)总线。2. **ISO 15765-2 2004 & 2016**:此部分构成了ISO15765协议的核心内容,深入描述了用于诊断服务的通信协议。2004年发布的版本主要阐述了诊断消息的编码、解码以及传输的具体方法,而2016年的版本则对原协议进行了补充与修订,以适应技术进步的需求。该标准规定了诊断请求与响应的格式要求,涵盖了单次传输、多次传输以及确认机制等要素,旨在确保数据的完整性和传输的可靠性。3. **ISO 15765-3 2004**:该部分着重于与安全相关的诊断需求,提出了额外的安全要求。它详细说明了在诊断过程中如何保障数据的安全性,防止任何未经授权的访问行为或数据篡改,以此来维护汽车系统的稳定运行和用户隐私安全。4. **ISO 15765-4 201...

65,212

社区成员

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

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