Recent

Author Topic: I have a int 123. I need to convert it to a string "100 + 20 + 3" How can do it?  (Read 2118 times)

-Caiman-

  • New Member
  • *
  • Posts: 10
Code: Pascal  [Select][+][-]
  1. procedure rozklad(x:integer);
  2.             var dlugosc, i, dzielnik, temp:integer;
  3.               s:string;
  4.            
  5.         begin
  6.               dzielnik:=10;
  7.               Str(x, s);        
  8.               dlugosc:= Length(s);
  9.               for i:=1 to dlugosc do begin
  10.                  temp:=x mod dzielnik;
  11.                  writeln(temp);
  12.                  x:=x-temp;
  13.                  dzielnik:=dzielnik*10;
  14.                    end;
  15.  
  16.         end;
  17.  
  18. var   n:integer;
  19.  
  20. begin
  21.   readln(n);
  22.   rozklad(n);
  23.   readln();
  24. end.
  25.  
I have a int 123(for example, it could be any integer number like 45789 btw.). I need to convert it to a string "100 + 20 + 3".
In my program it will be displayed as:
3
20
100
but i desperately need this to be displayed other way:
100
20
3
Could someone help me? Share pls your`s code if you have similar one . Thank you for answers!

Blaazen

  • Hero Member
  • *****
  • Posts: 3241
  • POKE 54296,15
    • Eye-Candy Controls
Code: Pascal  [Select][+][-]
  1. program Project1;
  2.  
  3. {$R *.res}
  4.  
  5.   procedure rozklad(x:integer);
  6.   var dzielnik, temp:integer;
  7.   begin
  8.     dzielnik:=1000000000;
  9.     while dzielnik>0 do
  10.       begin
  11.         temp:=x div dzielnik;
  12.         if temp>0 then
  13.           begin
  14.             writeln(temp*dzielnik);
  15.             x:=x-temp*dzielnik
  16.           end;
  17.         dzielnik:=dzielnik div 10;
  18.       end;
  19.   end;
  20.  
  21. var   n:integer;
  22. begin
  23.   readln(n);
  24.   rozklad(n);
  25.   readln();
  26. end.

The one note: this code can work with numbers up to 1999999999 but it is after all limitation of signed 32-bit integer.
Lazarus 2.3.0 (rev main-2_3-2863...) FPC 3.3.1 x86_64-linux-qt Chakra, Qt 4.8.7/5.13.2, Plasma 5.17.3
Lazarus 1.8.2 r57369 FPC 3.0.4 i386-win32-win32/win64 Wine 3.21

Try Eye-Candy Controls: https://sourceforge.net/projects/eccontrols/files/

-Caiman-

  • New Member
  • *
  • Posts: 10
Code: Pascal  [Select][+][-]
  1. program Project1;
  2.  
  3. {$R *.res}
  4.  
  5.   procedure rozklad(x:integer);
  6.   var dzielnik, temp:integer;
  7.   begin
  8.     dzielnik:=1000000000;
  9.     while dzielnik>0 do
  10.       begin
  11.         temp:=x div dzielnik;
  12.         if temp>0 then
  13.           begin
  14.             writeln(temp*dzielnik);
  15.             x:=x-temp*dzielnik
  16.           end;
  17.         dzielnik:=dzielnik div 10;
  18.       end;
  19.   end;
  20.  
  21. var   n:integer;
  22. begin
  23.   readln(n);
  24.   rozklad(n);
  25.   readln();
  26. end.

The one note: this code can work with numbers up to 1999999999 but it is after all limitation of signed 32-bit integer.

Thx so much man!

engkin

  • Hero Member
  • *****
  • Posts: 3112
Using strings:
Code: Pascal  [Select][+][-]
  1. procedure rozklad(x: Integer);
  2. var
  3.   s: String;
  4.   i: Integer;
  5. begin
  6.   s := x.ToString;
  7.   for i := 1 to s.Length do
  8.     if s[i]<>'0' then
  9.       writeLn(String(s[i]).PadRight(s.Length-i+1,'0'));
  10. end;

 

TinyPortal © 2005-2018