大数相加也算经典题之一了吧

大数相加

  关于C语言大数(有千百位数的)问题,一般都是使用字符串来记录的。这里,将分享一下大数的代码。

*分析

*就大数相加而言,首先末位对其,然后换成整数相加在加上进位

*记录进位,并对结果取模换成字符存入

*重复上述过程,直到公共部分加完

*然后把未加完的加进去

代码如下

 1 char* BigSum(char *a,char*b)//传入的为两个大数
 2 {
 3     char* c=(char*)calloc(N+1,sizeof(char));//其中N为宏定义大数的最大位数
 4     int len_a=strlen(a);
 5     int len_b=strlen(b);//用len_a和len_b来记录两个数的位数
 6     int k=N-1;
 7     int jinwei=0;//进位信息
 8
 9     for (len_a-=1,len_b-=1;len_a>=0&&len_b>=0 ;k--,len_a--,len_b-- )//全部从后面开始
10     {                                        //结束的条件是公共部分计算完成
11         c[k]=(a[len_a]-‘0‘+b[len_b]-‘0‘+jinwei)%10+‘0‘;//转换数字相加取模变字符
12         jinwei=(a[len_a]-‘0‘+b[len_b]-‘0‘)/10;//进位信息
13     }
14
15     for (;len_a>=0 ;len_a-- ,k--)//若a组还有剩余
16     {
17         c[k]=(a[len_a]-‘0‘+jinwei)%10+‘0‘;
18             jinwei=(a[len_a]-‘0‘)/10;
19     }
20     for (;len_b>=0 ;len_b-- ,k--)//若b组还有剩余
21     {
22             c[k]=(b[len_b]-‘0‘+jinwei)%10+‘0‘;
23                 jinwei=(b[len_b]-‘0‘)/10;
24     }
25     if(jinwei!=0)//最后结束时,进位是否还有
26         c[k]=jinwei+‘0‘;
27     for (k=0;k<101 ;k++ )//k已经无用,现用来记录结果的地址位置
28     {
29         if(c[k]!=‘\0‘)
30             break;
31     }
32     return c+k;
33 }

其实大数还是较为简单的,仅仅是将数字换成了字符来储存而已,下面为测试信息

 1 #include <stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 #define N 100                //这里的N为大数的最大位数(结果最大为N+1)
 5
 6 /*此处为上述代码*/
 7
 8 int main(void)
 9 {
10     char a[N],b[N];
11     gets(a);
12     gets(b);
13     printf("结果为:\n");
14     puts(BigSum(a,b));
15     return 0;
16 }    

运行结果为:

---仅供参考---

时间: 2024-11-06 04:57:35

大数相加也算经典题之一了吧的相关文章

高精度问题之大数相加(原来就是用字符串相加,模拟手算这么简单!)

解题心的: 就是基本的一对一模拟手算..借助c++的string 不用逆序运算了.很方便的补0.  最后处理下前导0的问题. #include <iostream> #include <string> using namespace std; // 实现大数相加 结果存放在num中 void bigIntergerAdd(string &num, string add) { int goBit = 0; // 存放进位 // 先交换下顺序 加数的位数要比较少 if (num

hdu 1556:Color the ball(线段树,区间更新,经典题)

Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7941    Accepted Submission(s): 4070 Problem Description N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的"小飞鸽"牌电

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

poj 1006:Biorhythms(水题,经典题,中国剩余定理)

Biorhythms Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 110991   Accepted: 34541 Description Some people believe that there are three cycles in a person's life that start the day he or she is born. These three cycles are the physical,

UVa 424 Integer Inquiry 【大数相加】

解题思路:因为给定的数据是多组,所以我们只需要多次做加法就可以了,将上一次的和又作为下一次加法运算的一个加数. 反思:还是题意理解不够清楚,最开始以为只是算三个大数相加,后来才发现是多个,然后注意到当输入a的第一个字符为0的时候结束运算,输出结果.  Integer Inquiry  One of the firstusers of BIT's new supercomputer was Chip Diller. He extended his explorationof powers of 3

hdu 1075:What Are You Talking About(字典树,经典题)

What Are You Talking About Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 102400/204800 K (Java/Others)Total Submission(s): 12617    Accepted Submission(s): 4031 Problem Description Ignatius is so lucky that he met a Martian yesterday. But

HDU 1250 Hat&#39;s Fibonacci(大数相加)

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1250 Hat's Fibonacci Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 12952    Accepted Submission(s): 4331 Problem Description A Fibonacci sequence

C++实现string类型的大数相加(带小数)

近日,做了一道阿里给的大数相加的编程题.题目大意如下: 输入两个string类型的数,如12.223  11,判断输入字符串是否合法.合法则输出true以及相加结果(true 23.223),非法则输出false """". 期间几经修改,在判断合法方面排除了如.212以及122.这种错误(出现除数字以及.以外的错误亦已排除). 主要的思路是将小数与整数部分进行分离,分别相加.由于小数部分可能想整数部分进位,需要进行进位判断. 完整代码如下: #include &l

nyist oj 311 全然背包 (动态规划经典题)

全然背包 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描写叙述 直接说题意,全然背包定义有N种物品和一个容量为V的背包.每种物品都有无限件可用.第i种物品的体积是c,价值是w. 求解将哪些物品装入背包可使这些物品的体积总和不超过背包容量,且价值总和最大.本题要求是背包恰好装满背包时,求出最大价值总和是多少. 假设不能恰好装满背包,输出NO 输入 第一行: N 表示有多少组測试数据(N<7). 接下来每组測试数据的第一行有两个整数M.V. M表示物品种类的数目,V表示背