Форум программистов, компьютерный форум, киберфорум
chizz
Войти
Регистрация
Восстановить пароль
Оценить эту запись

Умножение больших чисел

Запись от chizz размещена 05.06.2013 в 16:06
Обновил(-а) chizz 05.06.2013 в 16:07
Метки pascal

Функция mult умножает длинное число (задается строкой) на число типа integer. Возвращает результат в строку.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 function mult(s1:string;b:integer):string;
 var longnum:array[0..1000] of integer;
     i,c:integer;
     res:string;
  begin
  longnum[0]:=length(s1);
    for i:=0 to longnum[0] do
     longnum[longnum[0]-i+1]:=Ord(s1[i])-48;
     for i:=1 to longnum[0] do
         begin
              longnum[i]:=c+longnum[i]*b;
              c:=longnum[i] div 10;
              longnum[i]:=longnum[i] mod 10;
         end;
     While c>0 do
           begin
           longnum[0]:=longnum[0]+1;
           longnum[longnum[0]]:=c mod 10;
           c:=c div 10;
           end;
       if longnum[longnum[0]]=0 then  mult := '0'
           else
           for i:=longnum[0] downto 1 do begin
             res:=res+IntToStr(longnum[i]);
             mult:=res;
             end;
  end;
 
begin
      writeln(mult('123421343214213443532534514234213421341254325',11111111));
end.
 
// output: 1371348244222222348782223098987425322212445684305075
Может кто-нибудь напишет, как умножить два длинных числа?
Размещено в Без категории
Просмотров 1326 Комментарии 2
Всего комментариев 2
Комментарии
  1. Старый комментарий
    Аватар для dr.curse
    chizz, вот можно так (код не мой взят с http://e-maxx.ru/)
    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    typedef vector<int> lnum;
    ...
    lnum c (a.size()+b.size());
    for (size_t i=0; i<a.size(); ++i)
        for (int j=0, carry=0; j<(int)b.size() || carry; ++j) {
            long long cur = c[i+j] + a[i] * 1ll * (j < (int)b.size() ? b[j] : 0) + carry;
            c[i+j] = int (cur % base);
            carry = int (cur / base);
        }
    while (c.size() > 1 && c.back() == 0)
        c.pop_back();
    Запись от dr.curse размещена 05.06.2013 в 16:32 dr.curse вне форума
  2. Старый комментарий
    Аватар для turbanoff
    Вот так:
    Java
    1
    2
    3
    
    BigInteger first = new BigInteger("123421343214213443532534514234213421341254325");
    BigInteger second = new BigInteger("11111111");
    BigInteger mulResult = first.multiply(second);
    Запись от turbanoff размещена 22.06.2013 в 21:14 turbanoff вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.