20.05.2014, 17:50. Просмотров 826. Ответов 13
Как можно изменить в цикле строчку st *= 10;? Здесь просто считывается половина вектора, для маленьких чисел все хорошо, для больших идет переполнение при постоянном умножении на 10.
C++ |
1
2
3
4
5
6
7
8
9
| ...
a0 = 0;
int st = 1; //st-отвечает за разряд, в который будет записываться очередная цифра
for (long long i = 0; i < a.size()/2; i++) //записываем a0
{
a0 += a[i] * st ;
st *= 10;
}
... |
|
и вот тут тоже самое с m и m1, как можно сдвигать не используя умножение?
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| long long c0 = a0 * b0;
long long c1 = a1 * b1;
long long c2 = c0 + c1 - (a0 - a1)*(b0 - b1);
int m = 1; //m и m1 отвечает за нужную разрядность
for (int i = 0; i < k; i++)
{
m *= 10;
}
int m1 = m;
for (int i = 0; i < k; i++)
{
m1 *= 10;
}
cout << c0 <<endl;
cout <<c2 * m<<endl;
cout <<c1*m1<<endl;
}
... |
|