设计一个算法完成两个超长正整数的加法 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++;
}

}

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

5个回答

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

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

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

 #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

#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");

}

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
使用数组完成两个超长(长度小于100)正整数的加法
使用数组完成两个超长(长度小于100)正整数的加法rn为了实现高精度的加法,可将正整数M存放在有N(N>1)个元素的一维数组中,数组的每个元素存放一位十进制数,即个位存放在第一个元素中,十位存放在第二个元素中……,依次类推。这样通过对数组中每个元素的按位加法就可实现对超长正整数的加法rn谁能帮忙给我弄个源代码rn很着急的。。。
华为机试——两个超长正整数的加法 java
题目描述:请设计一个算法完成两个超长正整数的加法。  要求实现函数:   void AddLongInteger(char * pcAddend, char * pcAugend, char * pcAddResult); 输入参数:         char * pcAddend:加数         char * pcAugend:被加数         c
用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...
请教:计算两个超长的正整数的最大公因数
从键盘输入两个超长的正整数a,b,计算这两个数的最大公因数gcd(a,b),显示计算结果。rn例如键盘输入:rna=34rnb=56rn显示输出:rngcd(34,56)=2rnrn重要提示:rn如果b=0或者a=b,gcd(a,b)=a;rn如果ab,gcd(a,b)=gcd(a-b,b)rnrn 基本要求:设输入数据的最大长度不超过100位(注意:输入数据中不得包含数字以外的其它符号)。rn 扩展要求:输入数据长度不限
超长正整数相加
题目描述: 请设计一个算法完成两个超长正整数的加法。 接口说明:  /*  请设计一个算法完成两个超长正整数的加法。  输入参数:  String addend:加数  String augend:被加数  返回值:加法结果  */  public String AddLongInteger(String addend, String augend)  {      /*在
超长正整数的相加
题目: 设计一个算法实现超长正整数的相加。 输入:两个超长正整数 输出:这两个数相加的结果 例子: 输入:两个整数123456789123456789 123456789123456789 输出:这两个数相加的结果246913578246913578 代码: #include #include using namespace std; int main() { string in
超长正整数的减法
【问题描述】rn编写程序实现两个超长正整数(每个最长80位数字)的减法运算。rn rn【输入形式】rn从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083)。rn1. 第一行是超长正整数A;rn2. 第二行是超长正整数B;rn rn【输出形式】 rn输出只有一行,是长整数A减去长整数B的运算结果,从高到低依次输出各位数字。要求:若结果为0,则只输出一个0;否则输出的结果的最高位不能为0,并且各位数字紧密输出。rn 【输入样例】rn rn234098rn134098703578230056rn rn【输出样例】rn -134098703577995958rn【样例说明】rn进行两个正整数减法运算, 234098 -134098703578230056 = -134098703577995958。rnrnrn请写出完整代码 谢谢rn
78 超长正整数相加
题目描述 请设计一个算法完成两个超长正整数的加法。 接口说明 /* 请设计一个算法完成两个超长正整数的加法。 输入参数: String addend:加数 String augend:被加数 返回值:加法结果 */ public String AddLongInteger(String addend, String augend) { /在这里实现功能/ return null; } 输入描述: ...
超长正整数相加(OJ)
题目描述 请设计一个算法完成两个超长正整数的加法。 接口说明 /* 请设计一个算法完成两个超长正整数的加法。 输入参数: String addend:加数 String augend:被加数 返回值:加法结果 */ public String AddLongInteger(String addend, String augend) { /*在这里实现功能*/
华为机试---超长正整数相加
题目描述 请设计一个算法完成两个超长正整数的加法。   接口说明    /*  请设计一个算法完成两个超长正整数的加法。  输入参数:  String addend:加数  String augend:被加数  返回值:加法结果  */  输入描述: 输入两个字符串数字 输出描述: 输出相加后的结果,string型 输入例子:
超长整数的加法
使用C语言编写的超长整数加法,可以实现100以内的超长整数的加法的运算。
TCP Linux socket编程实现两个正整数的加法
仿照昨天的例子写的,虽然写的过程中遇到了一些卡壳的地方,但是还是顺利的改完bug,测试功能正常,心情有点点小happy,因为新鲜感吧...   功能:客户端输入两个正整数,把数据传给服务器端,然后在服务器端进行计算,再将结果返回给客户端。   服务器端代码: #include #include #include #include #include #include #i
设计一个算法,求输入正整数A和正整数B的最小公倍数。
设计一个算法,求输入正整数A和正整数B的最小公倍数。 package com.test.xml; import java.util.Scanner; public class LeastCommonNumber { public static void main(String[] args) { Scanner in = new Scanner(System.in); while
求两个正整数的最大公因数算法
此文档是我平时练习代码的一些小记录,一个很小的编程实例,关于求两个正整数的最大公因数的算法。
c语言版的超长正整数的乘法
任意输入两个超长的正整数,得到其乘积 是原创的,欢迎指正。
华为OJ(超长正整数相加)
题目:超长正整数相加 描述 请设计一个算法完成两个超长正整数的加法。 接口说明  /* 请设计一个算法完成两个超长正整数的加法。 输入参数: String addend:加数 String augend:被加数 返回值:加法结果 */ public String AddLongInteger(String addend, String augend) {     /
【华为oj】超长正整数相加
请设计一个算法完成两个超长正整数的加法。 接口说明  /* 请设计一个算法完成两个超长正整数的加法。 输入参数: String addend:加数 String augend:被加数 返回值:加法结果 */ 样例输入99999999999999999999999999999999999999999999999999 1样例输出100000000000000000000000000000000
数据结构:超长正整数相加相乘
关于超长正整数相加进一的思路以及超长正整数相乘思路希望大神们指导rn最好能有代码rn先谢谢了
超长正整数减法,错在哪里???
哪一步没有考虑到,或者有什么更好的算法???rn望高人指点~~~~rnrnrn/*rn【问题描述】rn编写程序实现两个超长正整数(每个最长80位数字)的减法运算。rn rn【输入形式】rn从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083)。rn1. 第一行是超长正整数A;rn2. 第二行是超长正整数B;rn rn【输出形式】 rn输出只有一行,是长整数A减去长整数B的运算结果,从高到低依次输出各位数字。rn要求:若结果为0,则只输出一个0;否则输出的结果的最高位不能为0,并且各位数字紧密输出。rn 【输入样例】rn rn234098rn134098703578230056rn rn【输出样例】rn -134098703577995958rn【样例说明】rn进行两个正整数减法运算, 234098 -134098703578230056 = -134098703577995958。rn*/rn#include rn#include rnvoid cancel (char s[]);rnvoid reverse (char s[]);rnrnint main()rnrn char a[100]='\0',b[100]='\0',temp[100]='\0';rn int len_a,len_b;rn int i;rn gets(a);rn gets(b);rnrn //去掉数组前面的0rn cancel (a);rn cancel (b);rnrn len_a=strlen(a);rn len_b=strlen(b);rnrn //使前一个数大于后一个数,并输出负号rn if (len_a=b[i])rn if (b[i]==0)rn a[i]=a[i];rn elsern a[i]=a[i]-b[i]+'0';rn rn elsern a[i]=a[i]+10-b[i]+'0';rn a[i+1]=a[i+1]-'1';//▲▲▲这一步好像不太对???▲▲▲rn rn reverse (a);rn cancel (a);rnrn printf ("%s\n",a);rn return 0;rnrnrn//删除数组前面的0rnvoid cancel (char s[])rn int len_s,i,j;rn len_s=strlen(s);rn for (i=0;i
华为oj 超长正整数相加
大数相加,主要是处理进位位就可以了,就按加法正常处理就行,程序比较简单 #include using namespace std; int main() { char inStr1[100], inStr2[100], outStr[150]; int len1, len2, pos,s,t,i,j,k; cin >> inStr1 >> inStr2; len1 = strlen(
华为机试题-超长正整数相加
#include #include using namespace std; // 输入参数: // char * pcAddend:加数 // char * pcAugend:被加数 // char * pcAddResult:加法结果 void AddLongInteger(char * pcAddend, char * pcAugend, char * pcAddResult) {
编程题——超长正整数相加
编程题——超长正整数相加 题目描述: 请设计一个算法完成两个超长正整数的加法。 输入描述: 输入两个字符串数字 输出描述: 输出相加后的结果,string型 示例: 输入 99999999999999999999999999999999999999999999999999 1 输出 100000000000000000000000000000000000000000000000000 程...
华为OJ——超长正整数相加
题目描述 请设计一个算法完成两个超长正整数的加法。 输入描述: 输入两个字符串数字 输出描述: 输出相加后的结果,string型 输入例子: 99999999999999999999999999999999999999999999999999 1 输出例子: 10000000000000000000000000000000000000000000000
【华为机试078】超长正整数相加
题目描述: 请设计一个算法完成两个超长正整数的加法。 Java实现: import java.util.*; import java.math.BigInteger; public class Main{ public static void main(String[] args) throws Exception { Scanner sc = new Scan...
【华为OJ】超长正整数相加
输入:两个超长正整数  (string类型) 输出:两数之和 #include #include using namespace std; int main() { string str1,str2,addend,augend; int str3[1000]; cin >> str1>>str2; int length1 = str1.size(); int length2
华为oj 超长正整数相加
解决思路是:将每个字符转换成int类型存放在数组中,然后反向从低位开始相加进位,数组需要反向输出,这样可以保证进位位有存储空间#include #include #include #define N 10000 using namespace std; void AddLongInteger(char *a,char *b) { int n1 = strlen(a); int n2 = st
华为机试题:超长正整数相加
描述: 题目描述:请设计一个算法完成两个超长正整数的加法。 要求实现函数: void AddLongInteger(char * pcAddend, char * pcAugend, char * pcAddResult); 输入参数: char * pcAddend:加数 char * pcAugend:被加数 char *
超长整数加法的C++实现
昨天一友人说其数据结构的老师出了个题目,问我是否能帮忙一下,我看一下题目,觉得很有趣,于是用C++(她要求要用C/C++,我本来很想用Object Pascal)写了这个程序,有兴趣的朋友就看看,顺便看看有没有虫虫。rn题目:长整数四则运算。rn问题描述:设计一个实现任意长的整数进行加法运算的演示程序。rn基本要求:利用双向循环链表实现长整数的存储,每个结点含一个整形变量。任何整形变量的范围是 -(2^15 - 1)~ (2^15 - 1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。 rn测试数据:rn(1)0+0;应输出“0”。rn(2)-2345,6789+-7654,3211;应输出“-1,0000,0000”。rn(3)-9999,9999+1,0000,0000,0000;应输出“9999,0000,0001”。rn(4)1,0001,0001+-1,0001,0001;应输出“0”。rn
求一个加法的算法
求一个加法的算法:rnX、Y为正整数rn90.3635*Y+43.5329*X的值最接近但不大于1500的X、Y数字组合
对于一个不小于3的正整数,设计一个C程序完成判断该正整数是否是素数的功能
如题,请大侠们帮忙?
完成多项式加法运算
每行第一个数表示本行有几项,每一项由两个整数表示,第一个数表示系数,第二个数表示次数。 输出:两个多项式之和,由空格隔开的一组整数表示即可。 样例: 输入:3 3 5 -2 1 4 0 4 2 3 -1 2 1 1 3 0 输出:3 5 2 3 -1 2 -1 1 7 0 #include &amp;lt;cstdio&amp;gt; const int max_n = 111...
微机原理加法 两个六位数的加法
微机原理加法 两个六位数的加法,先去掉掩码值,后执行加法。最后把结果输出。
两个超长大整数的乘法
两个超长大整数乘法,C++语言编写,运用了链表知识,简单详细
求两个正整数的最大公约数——多种算法
求两个正整数的最大公约数——多种算法 求两个正整数的最大公约数——多种算法
求两个正整数的最大公约数和最小公倍数(三种算法)
题目:求两个正整数的最大公约数和最小公倍数。 基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出。 提高要求:1.三种以上算法解决两个正整数最大公约数问题。 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&
程序设计大作业---超长正整数的减法
【问题描述】 编写程序实现两个超长正整数(每个最长80位数字)的减法运算。 【输入形式】 从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083)。 1. 第一行是超长正整数A; 2. 第二行是超长正整数B; 【输出形式】 输出只有一行,是长整数A减去长整数B的运算结果,从高到低依次输出各位数字。要求: 1、若结果大于0,则只输出结果数字,不输出正号;若结果为负,...
超长正整数相加/华为机试(C/C++)
题目描述 请设计一个算法完成两个超长正整数的加法。 接口说明  /*  请设计一个算法完成两个超长正整数的加法。  输入参数:  String addend:加数  String augend:被加数  返回值:加法结果  */  public String AddLongInteger(String addend, String augend)  {      /*在这里实现功能*/  ...
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池