超长整数加法计算

最后更新于:2022-04-01 10:11:58

对于long long类型也存放不下的超长整数,可以使用字符串模拟的办法来对其进行运算的模拟。此处仅做加法的示范,其他运算思想类似。 每四位视为一个整数,进位等情况对下一次的计算考虑影响。 ~~~ #include<iostream> using namespace std; #define MAX_LEN 50 int nNumA[MAX_LEN]; int nLenA = 0; int nNumB[MAX_LEN]; int nLenB = 0; int nResult[2*MAX_LEN]; int nLenR = 0; void CharToInt(char *szSource, int *nDes, int *Len) { int j = 0; int nDesLoc = 0; int nTotalNum = 0; int thisNum = 0; //当前char的值 int nHead = strlen(szSource) % 4; if (nHead != 0) { for (int k = 0; k< nHead; k++) { thisNum = (int)(szSource[k] - '0') + 0; nTotalNum = nTotalNum*10 + thisNum; j++; } nDes[nDesLoc] = nTotalNum; //数组开头不足四位 nTotalNum = 0; j = 0; nDesLoc++; } for (int i= nHead; i<strlen(szSource); i++) { if (j == 4) { nDes[nDesLoc] = nTotalNum; //每一个int数组为上存储四个数字 nTotalNum = 0; j = 0; nDesLoc++; } thisNum = (int)(szSource[i] - '0') + 0; nTotalNum = nTotalNum*10 + thisNum; j++; } if (nTotalNum != 0) { nDes[nDesLoc] = nTotalNum; nTotalNum = 0; j = 0; nDesLoc++; } *Len = nDesLoc; cout<<"长度为"<<nDesLoc<<endl; for (int j = 0; j< nDesLoc; j++) { cout<<nDes[j]<<" "; } cout<<endl; } void LenAdd() { int ALen = nLenA; int BLen = nLenB; int CStart = 0; int nFlag = 0; while (ALen != 0 && BLen != 0) { nResult[CStart] = (nNumA[ALen-1] + nNumB[BLen-1] + nFlag) % 9999; nFlag = (nNumA[ALen-1] + nNumB[BLen-1] + nFlag) / 9999; CStart++; ALen--; BLen--; } while (ALen > 0) { nResult[CStart] = (nNumA[ALen-1] + nFlag) % 9999; nFlag = (nNumA[ALen-1] + nFlag) / 9999; CStart++; ALen--; } while (BLen > 0) { nResult[CStart] = (nNumB[BLen-1] + nFlag) % 9999; nFlag = (nNumB[BLen-1] + nFlag) / 9999; CStart++; BLen--; } nLenR = CStart; cout<<"相加结果为:"<<endl; for (int i = CStart-1; i >-1 ; i--) { cout<<nResult[i]<<" "; } cout<<endl; } int main() { char szInput[100]; cout<<"输入第一个操作数"<<endl; cin>>szInput; CharToInt(szInput, nNumA, &nLenA); cout<<"输入第二个操作数"<<endl; cin>>szInput; CharToInt(szInput,nNumB, &nLenB); LenAdd(); system("pause"); } ~~~ ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-02-18_56c5c49be9e24.jpg)
';