大数相加 华为oj 超长正整数相加
发布时间:2020-12-14 02:25:37 所属栏目:大数据 来源:网络整理
导读:描述: 题目描述:请设计一个算法完成两个超长正整数的加法。 要求实现函数: void AddLongInteger(char * pcAddend,char * pcAugend,char * pcAddResult); 输入参数: char * pcAddend:加数 char * pcAugend:被加数 char * pcAddResult:加法结果 返回值:
描述: // ojTest05.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#define MAX 101
#define MAX2 202
void AddLongInteger(char * pcAddend,char * pcAugend,char * pcAddResult);
int main(int argc,char* argv[])
{
char a[MAX];
char b[MAX];
char in[MAX2];
char sum[MAX]={0};
int i=0;
int lenAll,j;
gets(in);
//gets(b);
lenAll=strlen(in);
while(in[i]!=' ')i++;
for(j=0;j<i;j++)
a[j]=in[j];
a[j]=' ';
for(j=0;(j<lenAll-i-1)&&in[i+j+1]!=' ';j++)
b[j]=in[i+j+1];
b[j]=' ';
AddLongInteger(a,b,sum);
i=strlen(sum);
while(i--){
printf("%c",sum[i]);
}
return 0;
}
void AddLongInteger(char * pcAddend,char * pcAddResult){//大数想加,结果保存在sum中,返回结果长度
int i=0;
int c=0;
char m[MAX]={0};
char n[MAX]={0};
int lenA=strlen(pcAddend);
int lenB=strlen(pcAugend);
int lenResult=(lenA>lenB)?lenA:lenB;
for(i=0;i<lenA;i++)
m[i]=pcAddend[lenA-i-1]-'0';
for(i=0;i<lenB;i++)
n[i]=pcAugend[lenB-i-1]-'0';
for(i=0;i<lenA||i<lenB;i++){
pcAddResult[i]=(m[i]+n[i]+c)%10+'0';
c=(m[i]+n[i]+c)/10;
}
if(c!=0){
lenResult++;
pcAddResult[lenResult-1]=c+'0';
}
pcAddResult[lenResult]=' ';
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |