大伙儿遇到很大的数都这么处理的

大家遇到很大的数都这么处理的
一道题:NYOJ 158

要求输出计算结果对2013求余后的数。

计算过程中涉及到排列组合(阶乘)。

当然不可能先计算出结果,再求余的~~
------解决方案--------------------
2013=3*11*61
如果需要用除法的话那就分别mod上面3个数然后中国剩余定理组合起来。
------解决方案--------------------
引用:
2013=3*11*61
如果需要用除法的话那就分别mod上面3个数然后中国剩余定理组合起来。

感觉能直接mod 3, 11, 6
那么直接mod 2013也没太大问题
------解决方案--------------------
如果单纯操作大数,这里有一个:http://download.csdn.net/detail/zjq9931/6213983
------解决方案--------------------
引用:
Quote: 引用:

2013=3*11*61
如果需要用除法的话那就分别mod上面3个数然后中国剩余定理组合起来。

感觉能直接mod 3, 11, 6
那么直接mod 2013也没太大问题

2013不是质数,除法不一定做得了。
------解决方案--------------------
#include <iostream>
#include <string>
using namespace std;
inline int compare(string str1,string str2) {//相等返回0,大于返回1,小于返回-1
         if (str1.size()>str2.size()) return 1; //长度长的整数大于长度小的整数
    else if (str1.size()<str2.size()) return -1;
    else                              return str1.compare(str2); //若长度相等,则头到尾按位比较
}
string SUB_INT(string str1,string str2);
string ADD_INT(string str1,string str2) {//高精度加法
    int sign=1; //sign 为符号位
    string str;
    if (str1[0]=='-') {
        if (str2[0]=='-') {
            sign=-1;
            str=ADD_INT(str1.erase(0,1),str2.erase(0,1));
        } else {
            str=SUB_INT(str2,str1.erase(0,1));
        }
    } else {
        if (str2[0]=='-') {
            str=SUB_INT(str1,str2.erase(0,1));
        } else { //把两个整数对齐,短整数前面加0补齐
            string::size_type L1,L2;
            int i;
            L1=str1.size();
            L2=str2.size();
            if (L1<L2) {
                for (i=1;i<=L2-L1;i++) str1="0"+str1;
            } else {
                for (i=1;i<=L1-L2;i++) str2="0"+str2;
            }
            int int1=0,int2=0; //int2 记录进位
            for (i=str1.size()-1;i>=0;i--) {
                int1=(int(str1[i])-'0'+int(str2[i])-'0'+int2)%10;
                int2=(int(str1[i])-'0'+int(str2[i])-'0'+int2)/10;
                str=char(int1+'0')+str;
            }
            if (int2!=0) str=char(int2+'0')+str;
        }
    }
    //运算后处理符号位
    if ((sign==-1)&&(str[0]!='0')) str="-"+str;
    return str;
}
string SUB_INT(string str1,string str2) {//高精度减法
    int sign=1; //sign 为符号位
    string str;
    int i,j;
    if (str2[0]=='-') {
        str=ADD_INT(str1,str2.erase(0,1));
    } else {
        int res=compare(str1,str2);
        if (res==0) return "0";
        if (res<0) {
            sign=-1;
            string temp =str1;
            str1=str2;