高精度运算模板(大数模板)

现在还没学java。。所以没法用java偷懒,先存一波C加加的大数运算模板,以备不时之需

补充:关于base参数的使用:代表字符串a和b都是在base进制下的数字,转换成10进制后进行运算后,返回的答案为base进制,默认为10进制,进制可以随意设置,用字符串ss和数组mp互相映射,使用之前用init函数初始化一下mp数组即可

一、两个正数的加法:

使用方法:输入完string a和string b后,调用plu函数进行加操作即可

const int N=4500;//最大长度
 
const string ss="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
 
int mp[150]; 
 
void postpoint(string& a)//移位处理
{
	int len=a.size();
	a.resize(N);
	for(int i=0;i

二、两个正数的乘法:

使用方法:和上述加法操作相似,只是将调用plus函数改成调用mulmax函数即可

const int N=4500;//最大长度
 
const string ss="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
 
int mp[150]; 
 
void postpoint(string& a)//移位处理
{
	int len=a.size();
	a.resize(N);
	for(int i=0;i

三、两个正数的减法:

使用方法:直接调用函数即可,参数为两个相减的数:a-b,base为进制

参考博客:https://blog.csdn.net/ACMer_QJ/article/details/80118152

const int N=4500;//最大长度
 
const string ss="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
 
int mp[150]; 

string sub(string a, string b,int base=10) 
{
    int i,j,k,s;
    string tmpa,tmpb,c,ans;
    tmpa.resize(N);
    tmpb.resize(N);
    c.resize(N);
    if(a.size()b.length()) 
		b='0'+b;
    int len=a.length();
    for(i=0;i=0;i--) 
	{
  		if (tmpa[i]>=tmpb[i]) 
            c[i]=tmpa[i]-tmpb[i];
		else 
		{
            c[i]=base+tmpa[i]-tmpb[i];
            tmpa[i-1]--;
        }
    }
    for(i=0;i

四、正数除整数的除法:

使用方法:直接调用即可,两个参数分别为一个正数和一个整数

参考博客:https://blog.csdn.net/u012860063/article/details/36903491

const int N=4500;//最大长度
 
const string ss="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
 
int mp[150]; 

string Except(string s,long long x,int base=10)  //大数除以整形数
{
    long long cmp=0;
    bool ok=false;
    string ans="";
    for(int i=0;i=x)
        {
            ok=true;
            ans+=ss[cmp/x];
            cmp%=x;
        }
        else
		{
            if(ok)
                ans+='0';  //注意这里
        }
    }
    if(ans.empty())
    	return "0";
    return ans;
}

void init()
{
	for(int i=0;i

五、正整数乘法取余:

使用方法:直接调用上面涉及到的函数即可

long long remain(string s,long long mod,int base=10)
{
	long long ans=0;
	for(int i=0;i

 

你可能感兴趣的:(高精度运算,模拟)