C++——大数計算(加算)

10882 ワード

大数計算とは、2つの制限された長さの数字を演算することです.制限長さは10,20でも100200でもいいので…long longとか他の分配空間の大きい数字タイプでやるなんて考えずに、おとなしく実用char配列を使いましょう.
2つの数字の長さが異なる可能性があるので、私は判断文を書きました.最初の数字の長さが2番目より小さい場合は、2つの数を交換して、短い数字を右に揃え、前に「0」で揃えます.2つの数字の長さが等しい場合は、交換せずに補完操作を行います.
あるポイントがしばらく詰まっていて、文字配列要素に値を付けているのを見つけたとき、「=‘0’」と書かれていたので、後で注意してください.
#include 
#include 		//          
using namespace std;

int main()
{
    char num1[100], num2[100], tch[100], num3[100];	//num1 num2         ,num3    
													//tch    num1 num2, num1     num2 
    cout << "       :";
	cin >> num1 >> num2;	//          
    int flag = 0;	//    ,flag 1     ,0      
	int len1 = strlen(num1), len2 = strlen(num2), tlen;	//len1 len2         
														//tlen    len1 len2 
	
	if(len1 < len2)	//  num1    num2  ,  , num1     num2   
	{
		strcpy(tch, num1);
		strcpy(num1, num2);
		strcpy(num2, tch);
		tlen = len1;
		len1 = len2;
		len2 = tlen;
	}
	
	if(len1 > len2)
	{
		for(int i = 0; i < len2; i++)	// num2    ,  len2  
		{
			num2[len1-1-i] = num2[len2-1-i];
		}
		for(int i = 0; i < len1 - len2; i++)	// num2       0  ,  len1-len2  
		{
			num2[i] = '0';
		}
	}
	
    for(int i = len1 - 1; i >= 0; i--) 	//     ,          
    {
        int temp1 = num1[i] - '0';	//   '1'    1
		int temp2 = num2[i] - '0';
        int temp3 = temp1 + temp2 + flag;	//flag     ,    0 1,     0
        flag = 0;
        if(temp3 >= 10)
		{
            temp3 -= 10;	//      ,    ,     ( -10),      
            flag = 1;
        }
        num3[i] = (temp3 + '0');	//   1    '1' 
    }
    cout << "     :";
	if(flag == 1)	//flag 1           ,      1 
		cout << '1';
    cout << num3;
    return 0;
}

2つの数の長さが等しくなくても、最高位に進位がある可能性があります.ここでは一つ一つ羅列しません.
162462897321 25895614	//len1>len2162488792935178952617462 368621740529	//len1=len2,      547574357991841236521579 351586154267	//len1=len2,      11928226758468621561452 179221462598	//len1187843024050

冰鳶鳶2020.7.11