c++大数计算模板

1.大数相加

string sum(string s1,string s2)
{
    if(s1.length()<s2.length())
    {
        string temp=s1;
        s1=s2;
        s2=temp;
    }
    int i,j;
    for(i=s1.length()-1,j=s2.length()-1;i>=0;i--,j--)
    {
        s1[i]=char(s1[i]+(j>=0?s2[j]-‘0‘:0));   //注意细节
        if(s1[i]-‘0‘>=10)
        {
            s1[i]=char((s1[i]-‘0‘)%10+‘0‘);
            if(i) s1[i-1]++;
            else s1=‘1‘+s1;
        }
    }
    return s1;
}  

2.大数乘以整形数

string Multiply(string s,int x)  //大数乘以整形数
{
    reverse(s.begin(),s.end());
    int cmp=0;
    for(int i=0;i<s.size();i++)
    {
        cmp=(s[i]-‘0‘)*x+cmp;
        s[i]=(cmp%10+‘0‘);
        cmp/=10;
    }
    while(cmp)
    {
        s+=(cmp%10+‘0‘);
        cmp/=10;
    }
    reverse(s.begin(),s.end());
    return s;
}  
string Except(string s,int x)  //大数除以整形数
{
    int cmp=0,ok=0;
    string ans="";
    for(int i=0;i<s.size();i++)
    {
        cmp=(cmp*10+s[i]-‘0‘);
        if(cmp>=x)
        {
            ok=1;
            ans+=(cmp/x+‘0‘);
            cmp%=x;
        }
        else{
            if(ok==1)
                ans+=‘0‘;  //注意这里啊。才找出错误
        }
    }
    return ans;
}  

原文地址:https://www.cnblogs.com/mayouyou/p/8407265.html

时间: 2024-10-15 13:11:06

c++大数计算模板的相关文章

大数加法 模板

转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents #include<cstdio> #include<cstring> void fan(char s[]) { char t; int i,j; for(i = 0,j = strlen(s)-1;i <= j;i++,j--) { t=s[i];s[i]=s[j];s[j]=t; } } int main() { int i,j,n,p=0,g=0,h=1,k

hdu_1041(Computer Transformation) 大数加法模板+找规律

Computer Transformation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8367    Accepted Submission(s): 3139 Problem Description A sequence consisting of one digit, the number 1 is initially wri

一步一步写算法(之大数计算)

原文:一步一步写算法(之大数计算) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 我们知道在x86的32位cpu上面,int表示32位,如果核算成整数的话,大约是40多亿.同样,如果在64位cpu上面,能表示的最大整数就是64位二进制,表示的数值要大得多.那么在32位如果想表示大整数怎么办呢?那只能靠我们自己想办法了. 首先我们回顾一下我们手算整数的加减.乘除法是怎么做到的: (1)记住9*9之间的乘法口诀 (2)记住个位与个位之间的加

大数类模板(+-*/%等等)

注意:必需先定义,再使用. #include <iostream> #include <cstring> using namespace std; #define DIGIT 4 //ËÄλ¸ô¿ª,¼´Íò½øÖÆ #define DEPTH 10000 //Íò½øÖÆ #define MAX 1000 typedef int bignum_t[MAX+1]; /*********************************************************

大数运算模板

大整数加法 /* 大整数加法 调用方式:add(a, b); 返回类型:string */ string add(string a, string b) { string s; reverse(a.begin(), a.end()); reverse(b.begin(), b.end()); int i = 0; int m, k = 0; while(a[i] && b[i]) { m = a[i] - '0' + b[i] - '0' + k; k = m / 10; s += (m

重温当年入门战之大数计算

大数计算: 由于编程语言提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算,因此需要利用其他方法实现高精度数值的计算,于是产生了大数运算. 大数计算简析:        大数计算实现的理论是,首先提取输入值赋予指定String字符串. 通过String.charAt(index)提取每一位的值,赋予int数组. 然后求相乘每一位的值和进位. 直到最后每一位都求出来. 代码实现:         1 import java.awt.*; 2 import java.awt.

【大数类模板】hdoj 4927 Series 1

题目很简单:分析发现满足杨辉三角,有通项公式,但是是高精度,大数题目. 记录一个大数类模板:以后好用 代码: #include<cstdio> #include<cstring> using namespace std; #define MAXN 9999 #define MAXSIZE 10 #define DLEN 4 class BigInt { private: int a[500]; int len; public: BigInt() {len = 1; memset(a

大数常用计算模板及例题

一.模板&例题 [两个大数相加] string sum(string s1,string s2) { if(s1.length()<s2.length()) { string temp=s1; s1=s2; s2=temp; } int i,j; for(i=s1.length()-1,j=s2.length()-1;i>=0;i--,j--) { s1[i]=char(s1[i]+(j>=0?s2[j]-'0':0)); //注意细节 if(s1[i]-'0'>=10)

大数计算问题

在求阶乘问题上,我们可以使用循环或者递归的思想,如果数值范围超过基本数据类型,可以使用java中的BigDecimal和BigInteger类:但是如果不使用java中这两个类怎么来计算呢? 拿两个数相乘来说,思路在于观察我们如何手工计算相乘,用程序来模拟手工计算相乘即可 1 import java.util.Scanner; 2 3 /** 4 * 大数相乘问题 5 * @author zbt 6 * 7 */ 8 public class MyBigData { 9 10 public st