设计一个算法完成两个超长正整数的加法 10C

要求实现函数:
void AddLongInteger(char * pcAddend, char * pcAugend, char * pcAddResult);
输入参数:
char * pcAddend:加数
char * pcAugend:被加数
char * pcAddResult:加法结果
返回值:无

我设计了一个函数
void AddLongInteger(char * pcAddend, char * pcAugend, char * pcAddResult)
{
int pcAddend_len = 0,pcAugend_len = 0,pcAddResult_len = 0;
char* temp_s1 = pcAddend,*temp_s2 = pcAugend;
while(*temp_s1)
{
pcAddend_len++;
temp_s1++;
}
while(*temp_s2)
{
pcAugend_len++;
temp_s2++;
}

char temp_pcAddresult[100] = {0};
int carry = 0;
int k=99;
for(int i=pcAddend_len-1,j=pcAugend_len-1;i>=0||j>=0;i--,j--)
{
    int temp_num;
    if (i<0)
    { temp_num = int(pcAugend[j]-'0') + carry; }
    else if (j<0)
    { temp_num = int(pcAddend[i] - '0') + carry; }
    else
    { temp_num = int(pcAddend[i] - '0') + int(pcAugend[j]-'0') + carry; }
    temp_pcAddresult[k--] = (char)(temp_num%10) + '0';
    carry = temp_num/10;
}
temp_pcAddresult[k] = (char)carry + '0';

for(int i=0;i<100;i++)
{
    if (temp_pcAddresult[i]!='0'&&temp_pcAddresult[i]!=0)
    {
        pcAddResult_len = 100-i;
        break;      
    }
}

char* temp_u = pcAddResult;
for(int i=0;i<pcAddResult_len;i++)
{
    *temp_u = temp_pcAddresult[100-pcAddResult_len+i];
    temp_u++;
}

}

但是传不出子函数中的结果,求大神指点!

1

5个回答

 #include<iostream>
using namespace std;
int main()
{
    char ch1[3000]={0};
    char ch2[3000]={0};
    int num1[3000]={0};
    int num2[3000]={0};
    cin>>ch1;
    cin>>ch2;
    int len1=strlen(ch1);
    int len2=strlen(ch2);
    int i,j;
    i=0;
    for(j=len1-1;j>=0;j--)
    {
        num1[i++]=ch1[j]-'0';
    }
    i=0;
    for(j=len2-1;j>=0;j--)
    {
        num2[i++]=ch2[j]-'0';
    }
    int len=len1>len2?len1:len2;
    for(i=0;i<len;i++)
    {
        num1[i]+=num2[i];
        num1[i+1]+=num1[i]/10;
        num1[i]%=10;
    }
    int index=len;
    //while(num1[index]==0) index--;
    if(num1[len]!=0)
        cout<<num1[len];
    for(i=len-1;i>=0;i--)
        printf("%d",num1[i]);
    printf("\n");

}

http://blog.csdn.net/menghuanxiy/article/details/47082121

2

讲真心话,话说的有点难听!用c写写得这么啰嗦也是……你用strlen计算出两个加数的长度后,取较大一个的长度,直接for循环,传入数值按从左到右,高位在左,i递减计算,就完事了

0
zuodijianke
低调的狮 大概写了下算法,楼主代码实在看不下去!用i,j两个变量控制,for的条件应该&&,一个字符数组到头就应该退出!然后再循环处理多余长度字符!就不知道你传入的 数组是高位在左还是在右!另外还是取两个长度的最大长度,以防止溢出!
大约 4 年之前 回复

我觉得直接搞一个sign的模板什么时候用的时候什么时候拿出来用,基本的运算全都可以用
git@code.csdn.net:snippets/823524.git

0

#include

using namespace std;

int main()

{

char ch1[3000]={0};

char ch2[3000]={0};

int num1[3000]={0};

int num2[3000]={0};

cin>>ch1;

cin>>ch2;

int len1=strlen(ch1);

int len2=strlen(ch2);

int i,j;

i=0;

for(j=len1-1;j>=0;j--)

{

num1[i++]=ch1[j]-'0';

}

i=0;

for(j=len2-1;j>=0;j--)

{

num2[i++]=ch2[j]-'0';

}

int len=len1>len2?len1:len2;

for(i=0;i {
num1[i]+=num2[i];
num1[i+1]+=num1[i]/10;
num1[i]%=10;
}
int index=len;
//while(num1[index]==0) index--;
if(num1[len]!=0)
cout for(i=len-1;i>=0;i--)

printf("%d",num1[i]);

printf("\n");

}

0
-1
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
请设计一个算法完成两个超长正整数的加法。
题目:请设计一个算法完成两个超长正整数的加法。 //两个超长整数的加法 string max_add(const string&amp; s1, const string&amp; s2) { string ret; int x1 = 0;//操作数1的每一位 int x2 = 0;//操作数2的每一位 int flag = 0;//进位 int cur = 0;//保存当前位...
两个超长正整数的加法
题目描述:      * 题目描述:请设计一个算法完成两个超长正整数的加法。  要求实现函数:   void AddLongInteger(char * pcAddend, char * pcAugend, char * pcAddResult); 输入参数:         char * Addend:加数         char * Augend:被加数         cha
超长正整数相加
题目描述 请设计一个算法完成两个超长正整数的加法。 输入描述: 输入两个字符串数字 输出描述: 输出相加后的结果,string型 输入: 99999999999999999999999999999999999999999999999999 1 输出: 100000000000000000000000000000000000000000000000000 代码如下: whil...
超长正整数的相加
题目: 设计一个算法实现超长正整数的相加。 输入:两个超长正整数 输出:这两个数相加的结果 例子: 输入:两个整数123456789123456789 123456789123456789 输出:这两个数相加的结果246913578246913578 代码: #include #include using namespace std; int main() { string in
华为OJ——超长正整数相加
超长正整数相加 题目描述 请设计一个算法完成两个超长正整数的加法。 接口说明  /*  请设计一个算法完成两个超长正整数的加法。  输入参数:  String addend:加数  String augend:被加数  返回值:加法结果  */  public String AddLongInteger(String addend, String augend)  {
超长正整数相加/华为机试(C/C++)
题目描述 请设计一个算法完成两个超长正整数的加法。 接口说明  /*  请设计一个算法完成两个超长正整数的加法。  输入参数:  String addend:加数  String augend:被加数  返回值:加法结果  */  public String AddLongInteger(String addend, String augend)  {      /*在这里实现功能*/  ...
程序设计大作业---超长正整数的减法
【问题描述】 编写程序实现两个超长正整数(每个最长80位数字)的减法运算。 【输入形式】 从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083)。 1. 第一行是超长正整数A; 2. 第二行是超长正整数B; 【输出形式】 输出只有一行,是长整数A减去长整数B的运算结果,从高到低依次输出各位数字。要求: 1、若结果大于0,则只输出结果数字,不输出正号;若结果为负,...
设计一个程序实现两个任意长的整数求和运算
用线性表实现整数加法,属于一个整数运算的计算器
编写程序实现两个超长正整数(每个最长80位数字)的减法运算。
求C语言代码编写程序实现两个超长正整数(每个最长80位数字)的减法运算。 【输入形式】 从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083)。1. 第一行是超长正整数A;2. 第二行是超长正整数B; 【输出形式】  输出只有一行,是长整数A减去长整数B的运算结果,从高到低依次输出各位数字。要求:1、若结果大于0,则只输出结果数字,不输出正号;若结果为负,则输出负号;若结果为0,则只输出...
大整数加法减法 完整算法 写一个表示大整数(>2256)的对象( C++或Java),能实现 +,-,*,/(运算符重载)(
加减法 乘除法自己琢磨吧... 写一个表示大整数(>2256)的对象( C++或Java),能实现 +,-,*,/(运算符重载)写一个表示大整数(>2256)的对象( C++或Java),能实现 +,-,*,/(运算符重载)写一个表写一个表示大整数(>2256)的对象( C++或Java),能实现 +,-,*,/(运算符重载)写一个表示大整数(>2256)的对象( C++或Java),能实现 +,-,*,/(运算符重载)写一个表
用c语言编程完成两个1000位以内的正整数的加法运算
因为1000位以内的数字相加,所以无法直接定义变量求和,故采用字符串数组存储的方式,然后将字符数字转化成整型数字再按位相加,处理进位情况,如果两个数位数不一致,要单独处理。 #include&lt;stdio.h&gt; #include&lt;string.h&gt; #include&lt;stdlib.h&gt; #include&lt;math.h&gt; #include&lt;ct...
C/C++实现大整数加减法
http://115.29.224.174/JudgeOnline/problem.php?id=1053采用存粹的字符串处理,涉及到 数字的优化(符号处理,去零) 字符串数字大小的比较 字符串的加法 字符串的减法 ac代码#include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <str
用c语言实现超长整数的四则运算
在编程计算时, 程序设计语言本身的计算精度能满足一般问题的精度要求, 但对于计算精度要求较高 的一些特殊问题, 如计算100 阶乘的精确值, 用普通编程方法不能满足精度要求, 必须采用特殊的编程方 法。本文把计算机原理中的数值运算方法应用于高级语言编程, 总结出了一个提高计算精度的有效方法, 叫做分段运算法, 如不考虑机器的运行时间和内存容量, 采用这种方法可以使计算精度达到任意位。
超长正整数(超出long表数范围)的相加算法(Java实现)
输入: 代表超长正整数的字符串a 代表超长正整数的字符串b 输出: 字符串a、b所代表的的正整数相加之后的字符串c 代码: import java.util.Scanner; /** *@Author wzy *@Date 2018年4月8日 *@Version JDK 1.8 *@Description */ public class run { public...
c/c++整理--实现任意长度正整数相加
编程实现任意长度的两个正整数相加   c/c++中有int、float、double等数据类型,但是它们的长度是有限的,现在要求可以是任意长度的正整数相加,这里可以使用字符串来表示数字,结果也是用字符串表示。这里的难点主要就是做加法运算时要考虑进位。 #include #include #include #include char* addBigInt(char* num1, cha
c语言任意长整数的加减法代码
c语言代码写的任意长整数加减法,虽然不是最优化的,但时间度杂度还行。
超长整数的减法实现
场景 当参加运算的数字是超过long型长度的数据,以至于只能用string字符串来存储,这时候加减乘除的运算已经不能用了。 对于这种问题Java提供了一个BigInteger类,可以用来存储,并有对应的加减乘除的方法,要求两个操作数都必须是BIgInteger型。可以解决问题。 这里从模拟计算机的内部实现解读来解决问题。 这个时候就可以像小时候列竖式来计算一样,一位一位的计算,或进位或借位,模拟计...
长整数的加减法
第一次写这么长的作业,各种困难,啥也不会,最后总算写完了,虽然不完美也不简洁,但是还是想记录一下 带头结点的双向循环链表存储,4位十进制一组,逗号分隔,实现任意长整数的加法减法运算,头结点做符号位 #include #include typedef int Elem; typedef struct Node {     Elem Data;     Node *next;    
华为机试题-超长正整数相加
#include #include using namespace std; // 输入参数: // char * pcAddend:加数 // char * pcAugend:被加数 // char * pcAddResult:加法结果 void AddLongInteger(char * pcAddend, char * pcAugend, char * pcAddResult) {
关于C语言大正整数相加的实现
大正整数的加法
大数相加(正整数)
#include using namespace std; const int AX = 1e5+666; const int maxn = 1e4+666; char s1[maxn]; char s2[maxn]; int a[maxn]; int b[maxn]; int main(){ int T; cin>>T; while(T--){ scanf("%s%s",s1,s2)
用C++实现长整数的输入输出
输入两个长整数,对其进行加,减,乘,除的运算功能,并输出结果的程序
位运算实现两个整数的加法运算
在程序员面试宝典中,看到了这个知识点,在这里记录一下实现代码。         #include using namespace std; int add(int a,int b) { if(b==0) return a; int sum,carry; sum=a^b; carry=(a&b)<<1; return add(sum,carry); }
c语言实现正整数的大数乘法
[code=&quot;java&quot;]#include #include #include char* multi(char r[],char b[],char a[],int *p){ int len=strlen(a),len1=strlen(b),rSta=99,i=len1,j=len,temp=0,cb,ca,tSum,sCur,tt,shi,ge; memset(r,'0',100)...
C语言两个超大很大的数相加可以是浮点数,整数
      近期需要处理很大的数相加,数据的有效位超过16位,而double为最多是16位有效位,且目前的系统中已经没有更大的数据类型来存储超过16位的数据。所以自己写了一个可以处理超大数相加的函数。下面来给大家共享成果,希望可以帮助大家快速开发,节省时间。函数的总体思想就是把字符串转换成数字数组,然后按位进行数值运算。如果是浮点数即存在小数点,则先忽略小数点,把小数点和整数部分和并,正常数值运算...
算法笔记之:大整数的四则运算
带来《算法笔记》第五章: 大整数的四则运算 #include&amp;lt;cstdio&amp;gt; #include&amp;lt;cstring&amp;gt; struct bign{ int d[1000]; int len; bign(){ memset(d,0,sizeof(d)); len=0; } ...
利用双向循环链表实现任意长的整数进行加法运算
【问题描述】 设计一个实现任意长的整数进行加法运算的演示程序 。 【基本要求】 利用双向循环链表实现长整数的存储,每个结点含一个整形变量。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。 【测试数据】 (1)0;0;应输出“0”。 (2)-2345,6789;-7654,3211;应输出“-1,0000,0000”。 (3)-9999,9999;1,0000,000
实现超大整数(超过long长度范围)的加法运算
昨天笔试,遇到这么一个问题:如果系统要使用超大整数(超过long长度范围),请你设计一个数据结构来存储这种超大型数字以及设计一种算法来实现超大整数加法运算)。 其实这个问题很好解决,超大整数可以直接使用String来存储。对于两个String存储的超大整数的相加,先比较二者长度,在短的那个前面补0,使两个String一样长。然后从尾部开始,挨个取数,相加并进位即可。代码如下:public Stri
实现两超大正整数相乘
题目:使用数组完成两个超长(长度小于100)正整数的乘法 程序思路:大数相乘有很多的算法,但是为了代码的可读性就选了 ...
链表的加法(递归)
1. 问题描述: 有两个用链表表示的整数,每个结点包含一个数位。 这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。 给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*) 测试样例: {1,2,3},{3,2,1} 返回:{4,4,4} {7,4,0,7,5},{2,7,2,3,4} 返回:{9,1,...
大整数加法计算思路与算法实现
大整数加法
利用位运算实现两个整数的加法运算
运用位运算实现两数之和
从键盘输入两个数字,之后完成两个整数的加法操作,不是数字提示错误信息
第一种方法,使用正则表达式 Scanner sc = new Scanner(System.in); String s = sc.next(); String s2 = sc.next(); if((s != null && s.matches("^[0-9]+$"))&&(s2 != null && s2.matches("^[0-9]+$"))){ System.out.printl
C++_data structure18
求定积分 <br>118 求满足特异条件的数列 <br>119 超长正整数的加法
任意长的整数加法运算
 【问题描述】       设计一个实现任意长的整数进行加法运算的演示程序。 【基本要求】 系统以菜单提示方式工作; 基本功能包括大整数输入、加法运算、大整数输出; 利用双向循环链表实现长整数的存储,每个结点含一个整型变量。任何整型变量的范围是-(215-1)~(215-1); 输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号
一元多项式的相加(两个)
#include&amp;lt;stdio.h&amp;gt; #include&amp;lt;malloc.h&amp;gt; typedef struct StudentType {  int a,z;  struct StudentType *next,*prior; }*Linklist,List; Linklist Build(int n) {  int i=n;  Linklist head=NULL,p=NUL...
只使用++实现减法、乘法、除法操作
在只容许使用++操作符号的情况下。请完成下面代码,实现减法、乘法、除法。注意:假设操作数全为正数,并且可以不考虑性能。不能使用--、*、/等操作符。 a)乘法 int multi(int op1,int op2){//op1*op2} b)减法 int sub(int op1, int op2){//op1 - op2} c)除法 int div(int op1, int op2){//o...
整数加法
题目描述 请设计一个算法能够完成两个用字符串存储的整数进行相加操作,对非法的输入则返回error 输入描述: 输入为一行,包含两个字符串,字符串的长度在[1,100]。 输出描述: 输出为一行。合法情况输出相加结果,非法情况输出error 示例1 输入 123 123 abd 123 输出 246 Error 思...
两个任意长度的长整数相乘(华为oj,C++)
#include #include typedef struct NODE { struct NODE * pUp; int shuzhi; struct NODE * pNext; }*pNode; int main(void) { char strMultiplierA[100] = "987654321987654321987654321"; char strMultipl
使用数组完成两个超长(长度小于100)正整数的加法
使用数组完成两个超长(长度小于100)正整数的加法rn为了实现高精度的加法,可将正整数M存放在有N(N>1)个元素的一维数组中,数组的每个元素存放一位十进制数,即个位存放在第一个元素中,十位存放在第二个元素中……,依次类推。这样通过对数组中每个元素的按位加法就可实现对超长正整数的加法rn谁能帮忙给我弄个源代码rn很着急的。。。