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

问题描述

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

要求实现函数:
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++;
}

}

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

解决方案

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

}

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

解决方案二:

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

解决方案三:

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

解决方案四:

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

}

解决方案五:

完成两个超长正整数的加法

解决方案六:

http://blog.csdn.net/huasonl88/article/details/4436229
http://www.cnblogs.com/caixu/archive/2011/09/27/2192910.html
http://wenku.baidu.com/link?url=KCxtqR15Vf8gYONoFdoguB-muj8Buu1fqco2XTBA1IsCjFEEfQLpOwEgVX0srDrdN-5zR2hD7yVsCJzcrcleK2X2PSNkPvtfgokQLFIG5ii

时间: 2024-08-22 05:44:29

设计一个算法完成两个超长正整数的加法的相关文章

游戏编程-如何设计一个算法求coinfilp游戏中的最佳步骤呢?

问题描述 如何设计一个算法求coinfilp游戏中的最佳步骤呢? 就是那个cocos2dx示例中的翻硬币游戏.规则如下: 1.有NxM的格子,N和M都是可变的,每个格子有一个硬币,有正反两面. 2.当点击某一个硬币时,该硬币和其相邻的四个硬币(如果存在)一起翻面.当场上所有硬币都处于正面时,游戏完成. 因为我不知道这个游戏如何玩,因此想写一个算法,自动求出任意状态下到达游戏完成的最佳步骤.但现在毫无头绪..求大神帮助

数据结构算法设计: 请设计一个算法,统计一个循环单链表L中的结点个数。

问题描述 数据结构算法设计: 请设计一个算法,统计一个循环单链表L中的结点个数. 算法设计: 请设计一个算法,统计一个循环单链表L中的结点个数. 解决方案 int n = 0; while (L != NULL) { L = L->next; n++; } 解决方案二: /* counts the nodes in the list / int fuc(struct list head) { void *tmp; int i; if(!head) return -1; for(i = 1, tm

编程-设计一个类用来表达两张牌的牌组,设计这个类的初始化方式

问题描述 设计一个类用来表达两张牌的牌组,设计这个类的初始化方式 设计一个类表达一组牌,设计牌组的初始化方式 //牌值 private string face; //花色 private string suit; public zupai(string suit, string face) { this.face = face; this.suit = suit; } //牌子 public string getFace() { return face; } //花色 public string

数据-毕设,设计一个可视化的管理系统,要求有单机版、网络版两种,请问用什么开发比较合适?急求回答,谢谢~

问题描述 毕设,设计一个可视化的管理系统,要求有单机版.网络版两种,请问用什么开发比较合适?急求回答,谢谢~ 毕业设计,设计一个管理系统,要求有单机版.网络版两种. 单机版可以直接进行数据输入.数据导出 网络版可以数据同步.数据查询 现在比较没有思路,单机版和网络版要用什么来开发? 打算单机的数据库使用SQLITE 网络版的用MYSQL 可视界面用什么开发?VC? 怎样选择开发工具,才能使单机到网络版的可移植性最高啊- - 解决方案 这个很简单,将数据库访问层抽象出来,抽象成一个接口. 业务和界

有5个数,a、b、c、d、e。可以进行两两相乘a*a a*b...以此类推,然后将两两相乘的数和原先的5个数一起进行排序,怎么设计这个算法

问题描述 题目如上,有代码的话更好. 解决方案 解决方案二:有5个数,a.b.c.d.e.可以进行两两相乘a*aa*b...以此类推,然后将两两相乘的数和原先的5个数一起进行排序,怎么设计这个算法解决方案三:好高深啊,没时间仔细看解决方案四:算法好久没研究过了,刚入行的时候接触了些解决方案五: 解决方案六:publicstaticvoidmain(String[]args){//Stringi="0";//Fun(i);//System.out.println(i);////Syste

在一个整型数组中有一个元素的出现次数超过了数组长度的一半,试设计一个 在时间上尽可能高效的算法,找出这个元素。

题目:在一个整型数组中有一个元素的出现次数超过了数组长度的一半,试设计一个 在时间上尽可能高效的算法,找出这个元素.要求:(1)给出算法的基本设计思想.(2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释.(3)说明你所设计算法的时间复杂度和空间复杂度. (1)基本的设计思想: 一个数字出现的次数超过了长度的一半, 那么我们可以这样认为这个数字出现的个数一定大于其他全部数字出现的个数之和.算法的步骤如下: ①设数组为data[],数组长度为n,i=1.置currentAxi

算法实现-数组中出了一个数字出现两次,其余数字都出现四次,怎样找出出现两次的数字?

问题描述 数组中出了一个数字出现两次,其余数字都出现四次,怎样找出出现两次的数字? 用java实现. 目前想法是能把出现两次的数分在两个数组中,然后异或.不知道应该怎样分,谢谢! 解决方案 我觉的比较笨的方法可以排序后查找

使用Annotations设计一个MVC框架

设计 当设计一个应用程序时, 清晰的分离该程序的不同逻辑组件, 总是被证明是有益的. 同时也存在许多不同的模式来帮助开发者实现这个目标.其中最有名同时也最常用的自然是Model-View-Controller (MVC)了, 它能够将每个应用程序(或者应用程序的一部分)分成三个不同功能的组件,并且定义了把他们联结在一起的规则.Swing本身就是基于这个模式的,而且每个使用Struts,这个流行的开发Web应用框架的人也都了解隐藏在MVC后面的理论. 这篇文章介绍了怎么样通过使用annotatio

WAP设计基础:到底该如何设计一个WAP站点

文章描述:到底该如何设计一个WAP站点. WAP站点,这似乎是一个有点落伍的东西.在诞生之初,它很简陋,只能通过一个叫WML的标记语言来搭建没有任何美感的文字+链接页面.而今,绝大部分WAP站点都开始使用xhtml标记语言,不过在iOS.Android风潮席卷全球的今天,这个演进似乎显得有点苍白无力.但在中国,WAP的用户群体依然是移动设备上网的绝对主力军.那么,到底该如何设计一个WAP站点呢?个人以为,需要从设备.浏览器.任务.场景四个方面入手.一个WAP站点好与坏,不取决于页面的绚丽程度,不