两个大数相加

通过字符串数组实现两个大数相加

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4
 5 //大数的最大位数
 6 #define MAX 100
 7
 8 //和的最大位数
 9 #define N 101
10
11 int main(int argc,char *argv[])
12 {
13     int i;//工作指针
14     int num1, num2, num3;//记录a,b两数的位数以及 两数相加后的和的位数
15     int c = 0;//记录进位
16     int sum;//记录某位相加的和
17
18     char temp[N];//记录相加的和
19     //为两数动态分配内存
20     char *a = (char*)malloc(MAX*sizeof(char));
21     char *b = (char*)malloc(MAX*sizeof(char));
22
23     printf("Enter the first number:\n");
24     scanf("%s",a);
25     printf("Enter the second number:\n");
26     scanf("%s",b);
27
28     num1 = strlen(a);
29     num2 = strlen(b);
30
31     //a记录位数较高的数
32     if(num1 < num2)
33     {
34         char *p;
35         int temp;
36         p = a;
37         a = b;
38         b = p;
39
40         temp = num1;
41         num1 = num2;
42         num2 = temp;
43     }
44     num3 = num1;//记录较大的位数
45
46     //相加
47     for(i = 0; i < num1; i++)
48     {
49         //工作指针小于较小的位数
50         if(i < num2)
51         {
52             //记录相加的和
53             sum = a[num1-i-1]-‘0‘ + b[num2-i-1]-‘0‘ + c;
54             if(sum >= 10)//和大于10
55             {
56                 c = 1;
57                 temp[i] = (char)((int)(‘0‘) + sum - 10);
58             }
59             else//和小于10
60             {
61                 c = 0;
62                 temp[i] = (char)((int)(‘0‘) + sum);
63             }
64         }
65         else{ //i >= num2
66             sum = a[num1-i-1] - ‘0‘ + c;
67             if(sum >= 10)
68             {
69                 if(i == (num1 - 1))
70                     num3++;
71                 c = 1;
72                 temp[i] = (char)((int)(‘0‘) + sum - 10);
73             }else{
74                 c = 0;
75                 temp[i] = (char)((int)(‘0‘) + sum);
76             }
77         }
78     }
79
80     //逆向打印两数的和
81     printf("The sum is:\n");
82     for(i = num3-1; i >= 0; i--)
83         printf("%c",temp[i]);
84     printf("\n");
85
86     return 0;
87 }

运行结果:

时间: 2024-09-30 15:10:17

两个大数相加的相关文章

两个大数相加 ----Javascrit 实现

(function(){ var addLarge = function(n1,n2){ var over = 0; var ret = ""; var len = Math.min(n1.length,n2.length); var sln1 = n1.substr(n1.length - len,n1.length ); var sln2 = n2.substr(n2.length - len,n2.length ); for(var i = len;i > 0; i--)

iOS中计算两个大数相加算法(OC实现)

我们知道计算机的数据类型不同,所能表示的数据量级也不相同,比如: unsigned int : 0-4294967295   int : -2147483648-2147483647 unsigned long : 0-4294967295long :  -2147483648-2147483647long long : -9223372036854775808 ~ 9223372036854775807unsigned long long : 0 ~ 18446744073709551615

C语言使用栈实现String类型的两个大数相加

要开始找工作了,记录下学习的关于数据结构的应用~~从栈开始~~ 栈和指针的应用~~~ 实现String类型的两个大数相加 主要思想是通过C语言的栈来实现,栈是后进先出的特点,因此很适合做这类计算.建立四个栈,分别按字符串字符先后顺序入栈大数的整数部分和小数部分,然后先计算小数部分的,由于小数部分是高位对齐,因此一直出栈最长小数栈的字符并进入小数结果的栈,小数位数对齐后,两个小数栈出栈进行相加.然后进行整数栈相加,由于整数部分是按低位对齐,因此直接出栈相加即可,将每位相加结果入结果整数栈.比如字符

栈实现两个大数相加

import java.util.Scanner; import java.util.Stack; public class JavaDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); /** * 第一个大数入栈 */ System.out.println("输入第一个大数:"); String firstNum = scanner.nextLine(); I

数据结构(java语言描述)顺序栈的使用(两个大数相加)

利用http://www.cnblogs.com/xleer/p/5289661.html中对顺序栈以及栈的进本方法的定义,实现超过整数上限的两个数的加法计算. 算法: package stack;/********************************************************************** * @author sch ********利用栈,计算两个大数的和.大数的值超过int存储的范围******************************

HDU 1002 A + B Problem II(两个大数相加)

详细题目点击:http://acm.hdu.edu.cn/showproblem.php?pid=1002 Problem Description I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B. Input The first line of the input contains an integer T(1<=T<=20)

[ACM] ZOJ Martian Addition (20进制的两个大数相加)

Martian Addition Time Limit: 2 Seconds      Memory Limit: 65536 KB   In the 22nd Century, scientists have discovered intelligent residents live on the Mars. Martians are very fond of mathematics. Every year, they would hold an Arithmetic Contest on M

java-两个大数相加

题目要求:用字符串模拟两个大数相加. 一.使用BigInteger类.BigDecimal类 public static void main(String[] args) { String a="8888899999999888";  String b="88888888888888";  String str=new BigInteger(a).add(new BigInteger(b)).toString();  System.out.println(str);

UVALive 6270 Edge Case(找规律,大数相加)

转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 找规律,前两个数的和等于后一个数的值: 其实就是大菲波数: 代码如下: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #include<cstdio> #include<cst