两个超大数相加算法

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/************************************************************************/
/* 功能:实现两个超大数相加
/* 参数:source1 -- 被加数,字符型数组,如12
/*       source2 -- 加数,字符型数组,
/*       result  -- 存放和,字符型数组
/************************************************************************/
void Add(char *source1, char *source2, char *result)
{
	int len1 = strlen(source1);
	int len2 = strlen(source2);
	int len = len1 >= len2 ? len1 : len2;
	int i = len1 - 1, j = len2 - 1, k = 0;
	char *temp = (char *)malloc(sizeof(char) * (len + 2));
	char x, y, z;
	int carryBit = 0;

	while (i >= 0 || j >= 0)
	{
		if (i < 0) x = '0';
		else x = source1[i];

		if (j < 0) y = '0';
		else y = source2[j];

		z = x + y - '0' - '0' + carryBit;
        temp[k++] = z % 10 + '0';
		carryBit = z / 10;

		i--;
		j--;
	}

	while (carryBit)
	{
		temp[k++] = carryBit % 10 + '0';
		carryBit /= 10;
	}

	for (--k, i = 0; k >= 0; k--, i++)
	{
		result[i] = temp[k];
	}
	result[i] = '\0';

	free(temp);// 释放内存
}

int main()
{
	char source1[1000];
	char source2[1000];
	char result[1100];

	scanf("%s%s", source1, source2);
	Add(source1, source2, result);

	printf("%s\n", result);
	return 0;
}
时间: 2024-12-25 19:22:28

两个超大数相加算法的相关文章

c++-两个double数相加除2小数部分竟然被截断?

问题描述 两个double数相加除2小数部分竟然被截断? 解决方案 输出为 100001 解决方案二: (double)((a+b)/2)这样呢 解决方案三: 所以还是标准IO好使.. 解决方案四: 2.0前面也加个double,然后最后结果前面也加个double 解决方案五: double a = 100000.0; double b = 100001.0; double c = ((a+b)*1.0)/2.0;这么写 解决方案六: 加上#include 这个头文件,然后在输出那改成这样:co

Two Sum:两数相加

[ 问题: ] Given an array of integers, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please no

有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

java 二维数组-java中把两个维数相同的矩阵对应的元素相加得到新的矩阵的代码

问题描述 java中把两个维数相同的矩阵对应的元素相加得到新的矩阵的代码 java中把两个维数相同的矩阵对应的元素相加得到新的矩阵的代码怎么写,在int[][] add(int[][]a,int[][] b)中添加代码,实现这个功能 解决方案 循环不就行了,和遍历差不多.

VBS 两数相加取值问题分析_vbs

一个昵称为预言家晚报的朋友很喜欢玩SOSO问问,等级LV10,已经算比较高了.晚上挂QQ的时候,看到他的问问有更新,就点进去看了一下,问题是: 我写了如下一段VBS 复制代码 代码如下: dim a,b,c a=inputbox("a","please input") b=inputbox("b","please input") c=a+b msgbox(c) 可是最后结果是11,我知道肯定是倒数第二行的"+&quo

0~9十个数,每个数只能使用一次,组成两个三位数相加和为四位数的算法

这几天上网,看到百度里面有人问这一道题目,0~9十个数,组成如下加法式 *** + *** = ****,每个数字都只能使用一次,问一共多少中组合? 今天,就用C#语言来写一下,解出这道题,其他语言算法相同,只是语法不同,这里由于时间关系,不再贴出代码. 针对大家提出的优化建议,已经将优化方案写出,下面是具体优化方案: 这里先讲解一下思路,首先我们是程序员,不是数学家,我们是站在编程的角度思考问题.这里是两个三位数相加,得到一个四位数,所有数字不能重复,最大的和应该为987 + 654 = 16

JAVA 求1~1000之间的连数相加

问题描述 例如:3=1+2,15=7+8,100=18+19+20+21+22.求1000以内有多少这样的数,分别是哪些数? 解决方案 解决方案二:题目描述的不清楚,3=1+2算的话,那1+2=3呢?3+4=7呢?1+2+3+4=10呢?解决方案三:确实啊没说清楚按lz的意思5=2+37=3+49=4+5....那么至少所有奇数都能成立啊解决方案四:楼主的意思是不是说:连续的数字相加等于1~1000之内的数,这样的组合有多少个?解决方案五:100内的,把100都改成1000看看是不是你要求的pu

JAVA函数实现任意给定一组数, 找出任意数相加之后的结果为35

用JAVA写一个函数.功能如下:任意给定一组数,例如{12,60,-8,99,15,35,17,18},找出任意数相加之后的结果为35(任意设定)的情况. 可以递归算法来解: package test1; import java.util.Arrays; public class demo { public static void main(String[] args) { String str = "12,60,-8,99,15,35,17,18,8,10,11,12"; int s

[华为机试真题][2014]64.实现两个合法时间相加

题目 描述: 给定两个合法的时间(格式固定:hh:mm:ss,时间合法,不用考虑其它情况),输入两个时间相加后的结果:注意,相加后的结果也必需是一个合法的时间: 附合法时间定义:小时在[00-23]之间,分钟和秒分别是在[00-59]之间: 运行时间限制: 无限制 内存限制: 无限制 输入: 时分秒格式的时间字符串,如00:00:00 输出: 时分秒格式的时间字符串,如00:00:00 样例输入: 00:00:00 00:00:01 样例输出: 00:00:01 答案提示: 建议将时间转换为秒数