精华内容
下载资源
问答
  • 最近文章已经学习了许多C语言的基础知识,...和我前一篇文章有点相关,前一篇是大数相加,这次请大家思考这个算法的实现:代码附上(思考动手后再看):#include#include#includeusing namespace std;int main(){ch...

    最近的文章已经学习了许多C语言的基础知识,大家一定要巩固学习,以及一些简单算法

    今天讲解的是C语言的大数相乘问题:

    举个例子:

    123456788943524*243252432236=???

    和我前一篇文章有点相关,前一篇是大数相加,这次请大家思考这个算法的实现:

    e2a9b4209b4174ea221674057d25f101.png

    代码附上(思考动手后再看):

    #include#include#includeusing namespace std;int main(){char num1[1500];char num2[1500];cin>>num1>>num2;int n = strlen(num1);int m = strlen(num2);int c[3000]={0};int a[1500];int b[1500];int z = 0;for(int i = n-1,j = 0;i>=0;i--,j++){a[j]=num1[i]-'0';}for(int i = m-1,j=0;i>=0;i--,j++){b[j]=num2[i]-'0';}for(int i = 0;i=10){c[i+1]+=c[i]/10;c[i]%=10;}}for(z = 2999;z>=0;z--){if(c[z]!=0){break;}}for(int i = z;i>=0;i--){cout<
    展开全文
  • 最近文章已经学习了许多C语言的...和我前一篇文章有点相关,前一篇是大数相加,这次请大家思考这个算法的实现:代码附上(思考动手后再看):#include#includeusing namespace std;int main(){string s1,s2;int ji...

    最近的文章已经学习了许多C语言的基础知识,大家一定要巩固学习

    今天讲解的是C语言的大数相减问题:

    举个例子:

    123456788943524-243252432236=???

    和我前一篇文章有点相关,前一篇是大数相加,这次请大家思考这个算法的实现:

    9115ea037da5c8d0a42630027bc579b2.png

    代码附上(思考动手后再看):

    #include#includeusing namespace std;int main(){string s1,s2;int jiewei = 0;cin>>s1>>s2;if(s1.size() s3;for(int i = len_s1-1;i>=0;i--){int v = s1[i]-s2[i]+jiewei;if(v<0){s3.push(v+10);}else{s3.push(v);}jiewei=(v>=0?0:-1);}while(s3.top() == 0) { s3.pop(); }while(!s3.empty()){cout<

    运用的知识,C++的输入输出,栈的操作,字符串的执行!!!

    展开全文
  • C语言实现大数相加

    千次阅读 2019-01-20 09:43:05
    最好的表达方式就是用字符串 , 然而字符串不能直接像数字一样相加相减 , 所以有了大数相加的算法   基本思想和普通的加法运算没有什么区别 , 只是处理的每一个数据从数字变成了字符 . 所以实现起来也比较简单  ...

    前言 : 所谓大数就是指位数特别大,几百上千位数的这种数字 , 所以这一类的数据不能用简单的int , long 等基本数据类型所表示 . 

    最好的表达方式就是用字符串 , 然而字符串不能直接像数字一样相加相减 , 所以有了大数相加的算法

     

    基本思想和普通的加法运算没有什么区别 , 只是处理的每一个数据从数字变成了字符 . 所以实现起来也比较简单

     

    以下是(原创)代码 :

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    char * AddBigNumber(char *s,char *p);     /*  函数声明  */
    int Max(int a,int b);
    
    
    int main()
    {
    	char s[] = "111111";
    	char p[] = "9999";
    	puts(AddBigNumber(s,p));
    	return 0;
    }
    
    
    char* AddBigNumber(char *s,char *p)
    {
    	int x = 0;
    	int len1 = strlen(s);         /*  获得字符串长度  */
    	int len2 = strlen(p);
    	int len3 = Max(len1--,len2--) + 1;      /*  结果的长度最大应为较长字符串长度+1  */
    	char *arr;
    	arr = (char*)malloc(sizeof(char)*(len3+1));                                         
          /*  为结果申请存储空间,+1是因为末尾有一个'\0'  */
    	arr = &arr[len3];       /*  因为是从末尾开始相加,所以指针跳转到末尾  */
    	*arr = '\0';
    	while(len1 >= 0 || len2 >= 0)  /*  当两个字符串都走完了才结束  */
    	{
    		if(len1 >= 0)
    			x += s[len1--] - '0';
    		if(len2 >= 0)
    			x += p[len2--] - '0';
    		*(--arr) = (x % 10) + '0';       /*  将结果对10取余赋给arr  */
    		x /= 10;              /*  重置为上一次运算的进位  */
    	}
    	if(x == 1)           /*  如果循环完后还有进位  */
    		*(--arr) = '1';
    	return arr;
    }
    
    
    int Max(int a,int b)
    {
    	return a > b ? a : b;
    }

     运算结果 : 

    char s[] = "111111111111111111111111111111111111111111111111";
    char p[] = "999999999999999999999999999999999999999999999999999999999999999999999999";

    展开全文
  • C语言大数相加

    千次阅读 2016-04-23 13:46:23
    算法思想:大数使用字符串存储,每一个单元存储操作数每一位,之后执行位相加。基本思路:字符串反转、字符变数字、位运算、反序输出C语言代码:#include<stdio.h> #include<string.h> #define Max 101 void ...

    问题描述:实现A+B=C 其中A、B位数超过100位
    算法思想:大数使用字符串存储,每一个单元存储操作数的每一位,之后执行位相加。

    基本思路:字符串反转、字符变数字、位运算、反序输出

    C语言代码:

    #include<stdio.h>  
    #include<string.h>  
    #define Max 101  
    void print(char sum[]);  
    void bigNumAdd(char a[],char b[],char sum[]);  
    int main()  
    {  
        char a[Max];  
        char b[Max];  
        char sum[Max];  
        gets(a);  
        gets(b);  
        bigNumAdd(a,b,sum);  
        print(sum);  
        return 0;  
    }  
    
    void bigNumAdd(char a[],char b[],char sum[])  
    {  
        int i=0;  
        int c=0;//表示进位  
              //初始化,对以后位运算有很大帮助!  
        char m[Max]={0};  
        char n[Max]={0};  
        memset(sum,0,Max*sizeof(char)); //这里不能写成memset(sum,0,sizeof(sum));原因见注意事项1  
        //字符串反转且字符串变数字  
        int lenA=strlen(a);  
        int lenB=strlen(b);  
        for (i=0;i<lenA;i++)  
        {  
            m[i]=a[lenA-i-1]-'0';  
        }  
        for (i=0;i<lenB;i++)  
        {  
            n[i]=b[lenB-i-1]-'0';  
        }  
        //位运算  
        for (i=0;i<lenA||i<lenB;i++)  
        {  
            sum[i]=(m[i]+n[i]+c)%10+'0';//得到末位  
            c=(m[i]+n[i]+c)/10;//得到进位  
        }  
    }  
    
    void print(char sum[])  
    {  
        int i=0;  
        int j=0;  
        int len = strlen(sum);  
        for (i=len-1;sum[i]==0;i--); //找到第一个不为零的位置,方便输出  
        for (j=i;j>=0;j--)  
        {  
            printf("%c",sum[j]);  
        }  
    }  

    注意事项:

    1、要注意sizeof的用法

      char sum[100], sizeof(sum) =100 (表示整个字符串的大小)
    
      char* sum 或 char sum[] (为函数参数), sizeof(sum)=4  (表示存储一个指针的单元大小)
    
      主要的区别:sum在定义的时候意义不同
    

    2、memset(sum,0,Max*sizeof(char)):

      作用:一般是用于初始化或清空一个内存块,等价于循环
    
     使用范围:百度说:在给char以外的数组赋值时,只能初始化为0或者-1,赋其他的值就要用循环来实现。对字符数组可以赋任何字符
    
      因为:在计算机里,0的二进制都是0,-1的二进制都是1。
    

    3、在这里,对字符串进行初始化0操作很重要,它会影响到位操作和输出,要引起重视!

    4、100位相加,和最大为101位,故申请最大为101

    展开全文
  • c语言计算大数相加(高精度加法)

    千次阅读 2019-02-19 18:00:18
    问题描述  输入两个整数a和b,输出这两个整数和。a和b都不超过100位。 算法描述  由于a和b都比较大,所以不能直接使用语言中... 计算c = a + b时候,首先将A[0]与B[0]相加,如果有进位产生,则把进...
  • 大数相乘、相加及相减算法(C语言)

    多人点赞 2019-11-23 11:35:31
    最近在学习大数相乘及相加的算法,发现大数相乘及相加有蛮多相似之处。当然,相比于大数相乘,该算法较简单。不过,当你学会了相乘的算法后,你就会在理解其它两种的算法,就非常容易,甚至可以自己写出更好的算法,...
  • 首先这个算法的要求是:两个一百位以内的大数相加输出结果,两个数长短不确定。     那么什么样数字是大数呢? 所谓大数其实就是一个无限大数字,他位数没有限制;int,long型都装不下...
  • 大数相加

    2018-05-23 21:49:24
    转自:https://blog.csdn.net/insistGoGo/article/details/6581466问题描述:实现A+B=C 其中A、B位数超过100位算法思想:大数使用字符串存储,每一个单元存储操作数每一位,之后执行位相加。基本思路:字符串反转...
  • 大数相加(C和python)

    2020-05-16 11:52:05
    在ACM一些算法中有这种类型问题的解决方法,下面是大数相加的算法: 1.C语言 #include<stdio.h> #include<string.h> #define MAXLEN 10000 int main() { //我们以两个数字相加为例,如果有更多,可以...
  • 大数相加问题

    2013-07-01 00:19:22
    大数相加问题 问题描述:实现A+B=C 其中A、B位数超过100位 算法思想:大数使用字符串存储,每一个单元存储操作数每一位,之后执行位相加。 基本思路:字符串反转、字符变数字、位运算、反序输出 C语言代码:...
  • 大数相加—位运算

    千次阅读 2014-12-19 15:45:48
    本文整理了C语言中大数据相加算法,基于位运算来实现。亲测可用。 //100位大数相加 #include #include #define Max 101//有进位101 int bigNumAdd(char a[],char b[],char sum[]) { int i=0; int c=0;...
  • 1题目描述设计算法完成两个超长正整数加法运算。2 问题分析与算法设计看到加法运算,首先想到c提供加法运算符。呵呵,这还不简单吗?题目不会如此弱智吧?再看看,注意到“超长正整数”,超长?!多长算超长阿...
  • 一些和数学有关的算法题目,比如两个大数相加,大数的阶乘
  • C语言中大数相加问题

    2019-03-07 14:56:37
    C语言的大数相加问题。 二、算法思想 把长数字用字符串的的形式输入,然后用数组分别存放2个加数。按照加法形式逐位相加并进位。然后输出。 三、代码 #include&lt;iostream&gt; #include&lt;iomanip...
  • 大数的阶乘(C语言实现)

    万次阅读 2012-09-05 20:29:17
    我之前贴了一个大数运算之100阶乘(C语言实现),当时由于时间紧,没怎细看,也没优化就给传上来了,后来发现运行效率确实不行,主要因为使用了累计相加来实现乘法,怪不得被人踩了几下,今天又琢磨了一下,重新写...
  • 高精度处理大数加法C语言实现

    千次阅读 2018-03-12 19:19:29
    大数加法 前言(本人学习算法c语言不久,只是发一点自己学习结果,仅供参考) 大数加法应该算是高精度题目里最简单题目了,所以本菜鸡也敢发一点自己心得了,代码应该能确定是正确(我测试了几个比较...
  • 大数的阶乘

    2018-05-01 16:51:24
    算法基本原理用我们小学时...具体方法可参考我其他文章:C语言大数相乘C语言大数相加代码#include&lt;stdio.h&gt; #define N 500010 int a[N],b[5],c[N],d[N]; int len(int *w) { //求数组有效长度函数...
  • 我们知道在C语言或C++语言中,通常受机器字长限制,我们会碰到如果某个整数范围超过一个范围就没法运算。这时我们只能先用字符串读进去,然后再将字符型“数”转换成数值“数”,再模拟手算,一位一位相加,...
  • 1、大数加法 两个大数我们可以用数组...下面是两个正大整数相加算法的C语言参考代码:#include&lt;stdio.h&gt; #include&lt;string.h&gt; #define MAX 1000 // 大数的最大位数 /* 大数加法...
  • 用户可把自己的算法编成一个个相对独立的函数模块,然后用调用的方法来使用函数。  可以说C程序的全部工作都是由各式各样的函数完成的, 所以也把C语言称为函数式语言。 由于采用了函数模块式的结构, C语言...
  • 小浩算法是一套针对小白的完整的算法训练流程! 目前共包括以下几个步骤: 算法基础知识 高频面试题解(图解) 算法视野扩展 目前已支持 PDF 下载 点击下载本项目全部内容 提取码:【8f8b】 包括:1、我...
  • 大整数乘法

    2012-03-18 16:01:06
    cout两数相加的结果为:"; if(f==0) for(i=0;i;i++) cout[i]; else { cout; for(i=0;i;i++) cout[i]; } } if(g==2) { cout两数相减的结果为:"; if(f==0) for(i=0;i;i++) cout[i]; else { cout; ...

空空如也

空空如也

1 2
收藏数 25
精华内容 10
关键字:

c语言大数相加的算法

c语言 订阅