【C】大数的加法

求:S = a + aa + aaa + aaaa + aaaaa + ... + aaaaaaaaaa;  最后一个为n个a,其中a 是一个数字。例如:

2+22+222+2222+22222 (n = 5)

 1 #include <stdio.h>
 2
 3 int * sum( int buffer[], int x, unsigned n)/*buffer用来存放n个x,所以buffer的最小size为n*/
 4 {
 5     int  i;
 6     //初始化
 7     for(i=0;i<n;i++)
 8     {
 9         buffer[i] = x;
10     }
11     //不进位,求和
12     for(i=0;i<n;i++)
13     {
14         buffer[i] = buffer[i]* (i+1);
15     }
16     //进位
17     for(i=n-1;i>0;--i)
18     {
19         int temp;
20         temp = buffer[i]/10;
21         buffer[i] = buffer[i] % 10;
22         buffer[i-1] += temp;
23     }
24     buffer[i] = buffer[i]%10;
25     return buffer;
26 }
27
28 int main()
29 {
30     int s[18];
31     sum(s, 3,17);
32     int i;
33     for(i=0;i<17;i++)
34         printf("%d",s[i]);
35     //free(s);
36     return 0;
37 }
时间: 2024-10-10 12:32:11

【C】大数的加法的相关文章

剑指offer编程题Java实现——面试题12相关题大数的加法、减法、乘法问题的实现

用字符串或者数组表示大数是一种很简单有效的表示方式.在打印1到最大的n为数的问题上采用的是使用数组表示大数的方式.在相关题实现任意两个整数的加法.减法.乘法的实现中,采用字符串对大数进行表示,不过在具体的计算中,还是要将字符串转化成字符数组来进行计算. 实现两个大数的加法,要考虑到两个问题,两个数的和的位数问题,以及如何处理两个数按位相加产生的进位问题.首先两个整数相加,两个数的和的位数最多比最大的整数的位数多1:这样和的位数就确定了.对于进位问题,我的做法是先进行按位相加,相加操作完成后再按照

YT15-HDU-How many fibs(大数相加法)

Problem Description Recall the definition of the Fibonacci numbers: f1 := 1 f2 := 2 fn := fn-1 + fn-2 (n >= 3) Given two numbers a and b, calculate how many Fibonacci numbers are in the range [a, b]. Input The input contains several test cases. Each

十进制大数的加法运算

输入文件的第一行为一个整数N,表示输入文件中接下来有N组数据,没组数据最多包含100行,每行有一个非常长的十进制整数组成,这个整数的长度不会超过100个字符,而且只包含数字,每组数据的最后一行为0,表示这组数据结束. 对输入文件的每组数据,输出他们的和. 此题不同于两大数相加,是多个大数相加的问题,在求和时,有其独到之处:竖式加法 #include<iostream> #include<stdio.h> #include<string.h> const int M=20

大数运算——加法

作为一个对编程没有很深研究的初学者,对于这些虽然没有任何算法的题仍然觉得很难很难,但是或许都是需要一个过渡时期吧,这是这几天的结果,很多有自己的考虑,自己的想法在里面,但是也百度查了很多,也看了很多别人写的关于这方面的. 先看一下关于大数方面的知识: bool型为布尔型,占1个字节,取值0或1. BOOL型为int型,一般认为占4个字节,取值TRUE/FALSE/ERROR. sbyte型为有符号8位整数,占1个字节,取值范围在128~127之间. bytet型为无符号16位整数,占2个字节,取

大数的加法,乘法,全排列实现

打印1到最大的n位数: 这里一个很重要的概念就是n位数,不知道n为多大,那么需要用一个字符来表示一个大数 这里用string来表示大数,为了打印的时候方便,这里需要模拟一个字符的加法操作 另外,之前实现过大数的乘法,异曲同工: http://blog.csdn.net/xietingcandice/article/details/44729323 #include<iostream> #include<string> using namespace std; int Incrume

抓起根本(二)(hdu 4554 叛逆的小明 hdu 1002 A + B Problem II,数字的转化(反转),大数的加法......)

数字的反转: 就是将数字倒着存下来而已.(*^__^*) 嘻嘻…… 大致思路:将数字一位一位取出来,存在一个数组里面,然后再将其变成数字,输出. 详见代码. 1 while (a) //将每位数字取出来,取完为止 2 { 3 num1[i]=a%10; //将每一个各位取出存在数组里面,实现了将数字反转 4 i++; //数组的变化 5 a/=10; 6 } 趁热打铁 例题:hdu 4554 叛逆的小明 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid

五:大数运算-加法运算

问题 : 大数-加法运算题目描述请计算两个整数相加(数的范围:0 <= num < 10 ^ 100)输入两个整数输出一个整数样例输入10000001000000样例输出2000000 1 #include<stdio.h> 2 #include<string.h> 3 #define M 100000 4 int Inter_Sum[M]; 5 void fun(char str1[],char str2[]){ 6 int t,m=0,i=strlen(str1);

大数的加法函数--c语言

浏览网站http://paste.ubuntu.com/23687758/ #include<stdio.h> #include<stdlib.h> #include<string.h> char * largeAdd(char a[],char b[]){ /* //传进来两个个字符串,返回结果为字符串 错误字符返回NULL 大位数的加法函数 ,位数不能超过1000 要加头文件<string.h> */ int a_num[1000]={0},b_num[

新手讲大数大数系列---加法

1.反转 2.求和 3.反转 比较简单,就是要细心 #include<iostream> using namespace std; void bigNumAdd(char *a,char *b,char *c){ int len_a=strlen(a),len_b=strlen(b),len_c; int len=(len_a>len_b?len_b:len_a),flag=0; int len_m=(len_a>len_b?len_a:len_b); memset(c,'0',1