精华内容
下载资源
问答
  • 大整数加法
    千次阅读
    2022-02-15 10:49:14

    大整数加法的思路是用两个数组储存两个整数的每一位然后分别相加,因为长度很长所以用字符串读入,为方便进位从个位开始储存到数组里,如大整数123456储存时用a【0】储存6;a【1】储存5......以此类推,然后各个位数相加,如果超过10进位。

    #include<iostream>
    #include<vector>//需要用vector函数,vector是长度可变的数组
    using namespace std;
    vector <int> add(vector<int> &a,vector<int> &b){
        vector<int> c;
        int t=0;
        for(int i=0;i<a.size()||i<b.size();i++){
            if(i<a.size())t+=a[i];
            if(i<b.size())t+=b[i];
            c.push_back(t%10);
            t=t/10;
        }
        if(t)c.push_back(1);
        return c;
    }
    int main(){
        string A,B;
        cin>>A>>B;
        vector<int> a,b;//开辟两个长度可变的数组来存大整数
        for(int i=A.size()-1;i>=0;i--) a.push_back(A[i]-'0');//从A的最高位开始储存到a中
        for(int i=B.size()-1;i>=0;i--) b.push_back(B[i]-'0');
        vector <int> c=add(a,b); 
        for(int i=c.size()-1;i>=0;i--)printf("%d",c[i]);
        return 0;
    }

    注:学习acwing上课程整理

    更多相关内容
  • 46、1168:大整数加法-2020-01-16(F) 46、1168:大整数加法-2020-01-16(F) 46、1168:大整数加法-2020-01-16(F)
  • 使用C++实现的大整数加法,用户可以输入任意位数的两个数字,使用该程序可以计算出其加法结果和减法结果。
  • 大整数加法 c++

    2013-12-08 15:23:02
    能够实现超出int类型表示的大整数加法运算
  • 大整数加法

    2012-05-11 10:16:16
    链表 大整数加法 数据结构课程相关程序 typedef struct Point{ int digit; struct Point* next; } CPoint;
  • C语言大整数加法

    万次阅读 多人点赞 2019-03-21 12:30:55
    C语言实现大整数加法 题目描述: 1:大整数加法 总时间限制: 1000ms 内存限制: 65536kB 描述 求两个不超过200位的非负整数的和。 输入 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。 输出 一行,即...

    C语言实现大整数加法

    题目描述:
    1:大整数加法
    总时间限制: 1000ms 内存限制: 65536kB
    描述
    求两个不超过200位的非负整数的和。
    输入
    有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
    输出
    一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
    样例输入
    22222222222222222222
    33333333333333333333
    样例输出
    55555555555555555555

    
    #include <stdio.h>
    #include <string.h>
    
    int 
    main(void)	
    {	
    	int bigInteger_1[201] = {0}; // 用来存放大整数1的整型数组
    	int bigInteger_2[201] = {0}; // 用来存放大整数2的整型数组
    	char sNum_1[201] = {'\0'};  // 用来接收用户输入的字符串形式的大整数1
    	char sNum_2[201] = {'\0'}; // 用来接收用户输入的字符串形式的大整数2
    	
    	//输入大整数1和大整数2
    	scanf("%s %s", sNum_1, sNum_2);
    	
    	/*
    		这两个循环的功能均是将字符串中的字符大整数,转换为int型数组中的整型值
    		并且转换后的int型数组中的低位序存储的是大整数的低位,即bigInteger_1[0]
    		存放的是大整数的个位,依次类推
    	*/
    	for (int i = 0, j = strlen(sNum_1) - 1; j >= 0; )
    	{
    		bigInteger_1[i++] = sNum_1[j--] - '0';
    	}
    	for (int i = 0, j = strlen(sNum_2) - 1; j  >= 0; )
    	{
    		bigInteger_2[i++] = sNum_2[j--] - '0';
    	}
    	
    	//进行大整数的加法
    	int k = 0;
    	while (k <= 200)
    	{
    		bigInteger_1[k] += bigInteger_2[k]; //将大整数从低位到高位依次相加
    		
    		if (bigInteger_1[k] >= 10)
    		{
    			bigInteger_1[k+1]++;
    			bigInteger_1[k] -= 10;
    		} 
    		k++;
    	}
    	
    	/*
    		去除前导零将大整数加法的结果进行输出,思路是,从加完后的大整数的最高位开始寻找
    		找到第一个不为零的数字后,记录这个不为零的数字在bigInteger数组中的索引,如果全部
    		数字全部为零,那么就输出零,否则就输出大整数中第一个不为零的数字及其后面的所有
    		数字。
    	*/
    	int mark = 0; // 用来记录第一个不为零的数字的索引
    	int i = 0;
    	for (i = 200; i >= 0; i--)
    	{
    		if (bigInteger_1[i] != 0)
    		{
    			mark = i; // 记录大整数中第一个不为零的数字的索引 
    			break; // 结束循环
    		}
    	}
    	
    	/*
    		如果i的值等于-1,说明遍历完大整数数组,也没有发现大整数数组中有存在非零的数
    		因此就可以判定大整数加完之后的结果就是零
    	*/
    	if (i == -1)
    	{
    		printf("0\n");
    	}
    	else
    	{
    		for (int i = mark; i >= 0; i--)
    		{
    			printf("%d", bigInteger_1[i]); // 从大整数中第一个不为零的索引开始进行遍历输出
    		}
    		putchar('\n');
    	}
    	return 0;
    }
    

    提交结果
    在这里插入图片描述
    注意事项:

    1. 忘记将bigInteger数组进行初始化,因为如果忘记将该数组中的全部内容全部初始化,就会导致数组中的全部初始值就是不确定的,这样在去除前导零时就会出错
    2. 在将字符串中的字符数字转换到int型数组中时,一定要分清楚int型数组的低位序存放的是大整数的低位还是高位,因为这样会影响大整数的加法操作
    3. 在进行大整数加法时,一定要从大整数的最低位开始相加,相加时不要忘记进位
    展开全文
  • c语言 大整数加法

    2021-05-22 15:08:37
    2013-12-07 回答以前我也做过一个大整数程序,2000!,不过那里面没有减法。做这个减法真让花时间啊。#include#include#include#define max 4000/*数位上限*/dd(char *a){char t[max];int i,j;for(i=0;i {if(a[i]==...

    2013-12-07 回答

    以前我也做过一个大整数程序,2000!,不过那里面没有减法。做这个减法真让花时间啊。

    #include

    #include

    #include

    #define max 4000/*数位上限*/

    dd(char *a)

    {

    char t[max];

    int i,j;

    for(i=0;i {

    if(a[i]==null)

    {

    for(j=0;i>0;j++,i--)

    {

    t[j]=a[i-1];

    }

    strncpy(a,t,j);

    break;

    }

    }

    }

    add1(char *a,char *b,int n,char *c)

    {

    int n;

    if(*a!=null&&*b!=null)

    n=*a-'0'+*b-'0'+n;

    else if(*a==null&&*b!=null)

    n=*b-'0'+n;

    else if(*a!=null&&*b==null)

    n=*a-'0'+n;

    else

    n=n;

    *c=(n%10)+'0';

    n=n/10;

    if(*(a+1)!=null||*(b+1)!=null||n!=0)

    {

    add1(a+1,b+1,n,c+1);

    }

    }

    addab(char *a,char *b,char *c)

    {

    dd(a);

    dd(b);

    dd(c);

    add1(a,b,0,c);

    dd(a);

    dd(b);

    dd(c);

    }

    d_(char *a)

    {

    int i;

    for(i=0;a[i]!=null;i++)

    {

    a[i]=a[i+1];

    }

    }

    udg1(char *a,char *b,int n,char *c)

    {

    int n;

    if(*b==null)

    {

    n=*a-'0'-n;

    n=0;

    }

    else

    {

    if(*a>=(*b+n))

    {

    n=*a-*b-n;

    n=0;

    }

    else

    {

    n=*a+10-*b-n;

    n=1;

    }

    }

    *c=n+'0';

    if(*(a+1)!=null)

    udg1(a+1,b+1,n,c+1);

    }

    udg(char *a,char *b,char *c)

    {

    int i;

    if((strcmp(a,b)>0&&strlen(a)==strlen(b))||strlen(a)>strlen(b))

    i=1;

    else if((strcmp(a,b)<0&&strlen(a)==strlen(b))||strlen(b)>strlen(a))

    i=-1;

    else

    i=0;

    dd(a);

    dd(b);

    dd(c);

    if(i==1)

    udg1(a,b,0,c);

    else if(i==-1)

    {

    udg1(b,a,0,c);

    for(i=0;i {

    if(c[i]==null)

    {

    c[i]='-';

    break;

    }

    }

    }

    else

    *c='0';

    dd(a);

    dd(b);

    dd(c);

    }

    add_(char *c)

    {

    int i;

    char t1,t2;

    t1=c[0];

    t2=c[1];

    c[0]='-';

    for(i=1;t1!='\0';i++)

    {

    c[i]=t1;

    t1=t2;

    t2=c[i+1];

    }

    }

    main()

    {

    char a[max]={null},b[max]={null},c[max]={null};

    printf("输入两个数:\n");

    scanf("%s",a);

    getchar();

    scanf("%s",b);

    getchar();

    if(a[0]!='-'&&b[0]!='-')

    {

    addab(a,b,c);

    }

    else

    {

    if(a[0]=='-'&&b[0]!='-')

    {

    d_(a);

    udg(b,a,c);

    }

    else if(a[0]!='-'&&b[0]=='-')

    {

    d_(b);

    udg(a,b,c);

    }

    else

    {

    d_(b);

    d_(a);

    addab(a,b,c);

    add_(c);

    }

    }

    printf("%s\n",c);

    getchar();

    }

    展开全文
  • JAVA实现的大整数加法

    2021-04-23 06:42:34
    JAVA实现的大整数加法public class Test{public static String addBigNum(String str1,String str2){//找出两字符串的长短,方便后边引用;String longer = str1.length() > str2.length()? str1 : str2;String ...

    JAVA实现的大整数加法

    public class Test{

    public static String addBigNum(String str1,String str2){

    //找出两字符串的长短,方便后边引用;

    String longer = str1.length() > str2.length()? str1 : str2;

    String shorter = str1.length() < str2.length()? str1 : str2;

    int[] a = new int[longer.length()];

    int temp = shorter.length();

    int rise = 0;

    int m , n ;

    StringBuffer sb = new StringBuffer();

    for(int i = a.length - 1 ; i >= 0 ; i--){

    if((i - a.length + temp) >= 0 ){

    m = Integer.parseInt(String.valueOf(longer.charAt(i)));

    n = Integer.parseInt(String.valueOf(shorter.charAt(i - a.length + temp)));

    a[i] = (m + n  + rise) % 10;

    rise = (m + n +  rise) / 10;

    } else {

    a[i] =  (Integer.parseInt(String.valueOf(longer.charAt(i))) + rise) % 10;

    rise =  (Integer.parseInt(String.valueOf(longer.charAt(i))) + rise)  / 10;

    }

    }

    for (int i = 0; i < a.length; i++) {

    sb.append(String.valueOf(a[i]));

    }

    return new String(sb);

    }

    }

    //没有考虑负整数的情况,需要的话需对代码做些调整。

    相关文档:

    在使用队列中,我们一般都会使用循环队列以保证性能

    package com.yz.myqueue;

    public class Queue {

    private Integer size;

    private Integer front;

    private Integer rear;

    private Object[] datas;

    public Queue(int size){

    this.size=size;

    this.front=-1;

    this.rear=-1;

    datas=new Object[size] ......

    java -cp .;c:\dir1\lib.jar Test

    -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上分号“;”

    分隔,linux上是分号“:”分隔。不支持通配符,需要列出所有jar包,用一点“.”代表当前路径。

    虽然现在都有eclipse之类的IDE ......

    大家都知道JAVA中使用OBJECT作为唯一的基类。但是JAVA的设计者为什么要这样做呢?重读《TTHINKING IN JAVA》,得出以下原因:

    1,JAVA是纯面向对象的语言。单继承体系保证了所有新建的或JDK中已有的类都必须继承自OBJECT。这样,保证了所有的类都具有一些基本的方法。例如一个String对象有toString()方法,另外一个Math对� ......

    Java 实现的选择排序法,先在Netbeans里调试运行了一下,然后又在Eclipse了运行了一下。

    public class ArraySort {

    public static void main(String[] args) {

    int Arrays[]={50,45,2,678,90,40,};

    int i,j,temp,min;

    int len=Array ......

    // 注册应用程序全局键盘事件, 所有的键盘事件都会被此事件监听器处理.

    Toolkit tk = Toolkit.getDefaultToolkit();

    tk.addAWTEventListener(new MyAWTEventListener(), AWTEvent.KEY_EVENT_MASK);

    class MyAWTEventListener implements AWTEventListener {

    private boolean controlPressed = fal ......

    展开全文
  • 高精度算法
  • 该程序利用双向链表实现大整数加法,理论上说可以无限大。
  • 大整数加法,大整数乘法,e的x次幂的C语言实现方法。
  • 大整数加法 前言 记录学习的过程 题目 Chapter 2, HLOJ 9515,例2.5.2 大整数加法 输入2个大正整数(长度可能达到1000位),求两者之和。 输入格式: 测试数据有多组,处理到文件尾。每组测试数据输入两个正整数A和B...
  • NOI OJ 1.6 10:大整数加法 C语言

    千次阅读 多人点赞 2021-10-23 15:57:43
    有一说一我本人是不大想讲的,因为这个题考的就是你们的思路,算是oj上的第一难点吧(事实上就是我懒,讲解一遍太费力了)。但是,我看很多同学都卡死在这道题,一筹莫展,我就感到十分的悲痛,宝贵的刷题时光就...
  • 计蒜客T1098:大整数加法(高精度加法详解)

    千次阅读 多人点赞 2020-07-17 23:16:06
    高精度算法,属于处理数字的数学计算方法。在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的数字。一般这类数字我们统称为高精度数,`高精度算法是用计算机对于超大数据的一...
  • /*** 整数加法** @param lv* 左值* @param rv* 右值* @param result* 相加的结果* @数值存放说明 数值的每一位作为栈的一项存放在栈中,从栈底到栈顶依次是数值的高位到低位* @算法描述 输入的加数倒序存放在栈中(即...
  • 高精度加法是高精度四则运算中比较简单的, 主要就是将长整数当成string读入,然后 倒着存到vector中,然后处理一下进位的问题 #include<iostream> #include<vector> using namespace std; vector<...
  • NULL 博文链接:https://nisen.iteye.com/blog/804095
  • ybt 1168:大整数加法 OpenJudge NOI 1.6 10:大整数加法 【题目考点】 1. 高精度 考察:高精加高精 高精度计算讲解 【解题思路】 注意:输入可能有多余的前导0,那么需要在将字符串转为数字数组时,调用setLen函数...
  • 1168:大整数加法 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 44610 通过数: 14295 【题目描述】 求两个不超过200位的非负整数的和。 【输入】 有两行,每行是一个不超过200位的非负整数,可能有多余的...
  • 大整数加法——C语言

    千次阅读 多人点赞 2020-03-19 22:28:28
    高精度计算——大整数加法 这是我写过的程序,主要也是为记录和学习,以下代码是该程序的思路和答案(注释是我自己写的),如有不对,请指出。 问题描述 求两个不超过200位的非负整数的和。 输入数据 有两行,每行是...
  • 该资源通过C++代码实现两个大整数的相加,适用于当long long也存不下的数进行相加时使用,通过数组模拟算术加法实现,运行时只需输入两个加数,敲回车即可出结果
  • 1168:大整数加法

    2020-06-23 15:37:04
    1168:大整数加法 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 32029 通过数: 9728 【题目描述】 求两个不超过200位的非负整数的和。 【输入】 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。 ...
  • java 大整数加法

    千次阅读 2020-05-09 11:53:48
    求两个不超过200位的非负整数的和。 输入 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。 输出 一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。 样例输入...
  • 单链表大整数加法

    2019-09-27 18:31:11
    单链表大整数加法,节点是char型。 First List: head->1->8->9 Second List: head->9->8->1 Result List: head->1->1->7->0 实现了单链表(单链表类模板),现在使用单链表实现...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 95,007
精华内容 38,002
关键字:

大整数加法