C++——大数計算(加算)
10882 ワード
大数計算とは、2つの制限された長さの数字を演算することです.制限長さは10,20でも100200でもいいので…long longとか他の分配空間の大きい数字タイプでやるなんて考えずに、おとなしく実用char配列を使いましょう.
2つの数字の長さが異なる可能性があるので、私は判断文を書きました.最初の数字の長さが2番目より小さい場合は、2つの数を交換して、短い数字を右に揃え、前に「0」で揃えます.2つの数字の長さが等しい場合は、交換せずに補完操作を行います.
あるポイントがしばらく詰まっていて、文字配列要素に値を付けているのを見つけたとき、「=‘0’」と書かれていたので、後で注意してください.
2つの数の長さが等しくなくても、最高位に進位がある可能性があります.ここでは一つ一つ羅列しません.
冰鳶鳶2020.7.11
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>len2
:162488792935
:178952617462 368621740529 //len1=len2,
:547574357991
:841236521579 351586154267 //len1=len2,
:1192822675846
:8621561452 179221462598 //len1
:187843024050
冰鳶鳶2020.7.11