大数加法

语法:add(char a[],char b[],char s[]);

参数:

a[]: 被乘数,用字符串表示,位数不限

b[]: 乘数,用字符串表示,位数不限

t[]: 结果,用字符串表示

返回值: null

注意:  

  空间复杂度为 o(n^2)

  需要 string.h

源程序:  

 

#include <iostream>
#include <string.h>
using namespace std;
void add(char a[],char b[],char back[])
{
    int i,j,k,up,x,y,z,l;
    char *c;
    if(strlen(a)>strlen(b))
        l=strlen(a)+2;
    else
        l=strlen(b)+2;
    c=(char *) malloc(l*sizeof(char));
    i=strlen(a)-1;
    j=strlen(b)-1;
    k=0;up=0;
    while(i>=0||j>=0)
        {
            if(i<0)
                x='0';
            else
                x=a[i];

            if(j<0)
                y='0';
            else
                y=b[j];

            z=x-'0'+y-'0';

            if(up)
                z+=1;
            if(z>9)
            {
                up=1;
                z%=10;
            }
            else
                up=0;
            c[k++]=z+'0';
            i--;
            j--;
        }
    if(up)
        c[k++]='1';
    i=0;
    c[k]='\0';
    for(k-=1;k>=0;k--)
        back[i++]=c[k];
    back[i]='\0';
}
void add(char a[],char b[],char back[]);
int main()
{
    char a[100];
    char b[100];
    char back[100];
    cout<<"请输入两个大数:"<<endl;
    cin>>a>>b;
    add(a,b,back);

    cout<<"大数相加结果是:"<<back<<endl;
    return 0;
}

本文转自博客园xingoo的博客,原文链接:大数加法,如需转载请自行联系原博主。

时间: 2024-09-20 04:16:27

大数加法的相关文章

大数加法和乘法

#include<iostream> #include<cstdio> #include<cstring> const int Len=5000//大数的长度 using namespace std; int Input (char n[])//将大数读入的函数 { char s[Len]; int l; for(int i=0; i<Len; i++) n[i]=0; if(scanf("%s",s)<1) return -1; l=

n个大数加法(高精度)

 #include <iostream> #include <stdio.h> #include <string.h> using namespace std; int dx(char a[]) {     int tmp,len;     len=strlen(a);     for(int i=0;i<len/2;i++)     {         tmp=a[i];         a[i]=a[len-1-i];         a[len-1-i]

Java工作利器之常用工具类(二)——数字工具类-大数乘法、加法、减法运算

上篇分享了一下数字转汉字的小功能,这里再分享一下大数相乘.相加.相减的功能.其他的不做过多的铺垫了,我先讲一下各个功能的计算原理. Ⅰ. 乘法运算 为什么先说乘法运算--因为我先做了乘法运算.其实思路也是很多的,但是最终我参考了网络上的一种计算方案,然后做了很多的修改.感觉这个在思路上应该是比较简单的. 简单点说:把数拆分成整数小数分别进行乘法运算,然后将结果放入一个特定长度的数组中,在放入是要计算存放的偏移位置,最后再对这个进行处理(进位.标记等),得到最终的结果. 是不是有点晕.请我详细说一

C#的加法运算

加法操作符可以用运用于整数类型.实数类型.枚举类型.字符串类型和代表类型.这是通过操作符重载实现的,我们将在第十一章讲述操作符重载的内容,这里我们只需要知道这些操作符可以对不同类型的变量进行运算就可以了.加法操作符实际上定义了以下原型用于整数和浮点数运算: int operator +(int x,int y); uint operator +(uint x,uint y); long operater +(long x,long y); ulong operator +(ulong x,ulo

[算法系列之八]大数问题(高精度运算)

[大数相加] [代码一] /********************************* * 日期:2015-01-28 * 作者:SJF0115 * 题目: 大数加法(高精度加法) * 博客: **********************************/ #include <iostream> using namespace std; string AddString(string num1,string num2){ int len1 = num1.length(); in

poj 1503 Integer Inquiry【高精度】

这题总算是没有那么水的感觉了,不过还是水题,哈哈哈...题目主要是求高精度----大数的和,我专门写了一个add函数处理,sum和VeryLongIntegers是两个全局的变量,开始我还准备把sum也写成char型的字符串,但是考虑到结尾的'\0',那不是自找麻烦..果断换成int型数组,这样就容易处理多了. 在add函数中,我把VeryLongIntegers又反转了一次(即变成低位在前),也换成一个int型的数组,这样就变成两个int型数组的高精度加法了... 开始还觉得可能会WA一次,不

[剑指Offer] 第3章课后题详解

[剑指Offer] 第3章课后题详解 目录 剑指Offer 第3章课后题详解 目录 大数加法 分析 解法 优化 链表的中间节点 分析 解法 环形链表 分析 解法 反转链表 分析 解法 大数加法 本题为<剑指Offer>"面试题12:打印1到最大的n位数"一节中的"相关题目". 定义一个函数,在该函数中可以实现任意两个整数的加法. 分析 由于没有限定输入两个数的大小范围,所以需要把它当做大数问题来处理.大数无法用int,long甚至long long类型来

c++字符串-C++中如何将输入的字符串中的数字提取出来做加减法

问题描述 C++中如何将输入的字符串中的数字提取出来做加减法 char shu[100]; scanf("%s",shu); int sum; sum+=字符串中的数字 这个应该怎样完成?当我提取了字符串中的数字后,但发现字符串中的数字是以ASIii的形式运算的,这该怎么办? 解决方案 #include "stdafx.h" #include <string.h> void main() { char shu[100]; scanf("%s&q

常见前端面试题及答案_其它综合

前言 本文是在GitHub上看到一个大牛总结的前端常见面试题,很多问题问的都很好,很经典.很有代表性.上面没有答案,我就整理了一下,从网上找了一些相关问题的答案.里面有一部分问题的答案我也没有进行考证,不少答案都来源于网络,或许会有疏漏之处,仅供大家参考哦!(还有一部分问题答案还未整理,大家也可以自己搜索一下答案) 1.你能描述一下渐进增强和优雅降级之间的不同吗? 优雅降级:Web站点在所有新式浏览器中都能正常工作,如果用户使用的是老式浏览器,则代码会检查以确认它们是否能正常工作.由于IE独特的