Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2011, 10:51   #1
gylayko
Форумчанин
 
Регистрация: 14.09.2011
Сообщений: 203
Счастье Задача со строками!

целое число превышающее 3 млн представление символьной строкой. Удвоить его и ответ вывести! Паскаль. Как это можно сделать?
gylayko вне форума Ответить с цитированием
Старый 24.11.2011, 10:59   #2
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

работать с числом как с массивом цифр, поищите по форуму "Длинная арифметика"
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 24.11.2011, 11:12   #3
KORT
Вот я и
Форумчанин
 
Аватар для KORT
 
Регистрация: 07.04.2007
Сообщений: 501
По умолчанию

Набросал на скорую руку
Код:
var
  s: string;
  n: LongInt;
  kod: integer;
begin
readln('Число ',s);
val(s,n,kod);
if n > 3000000 then
  n:=n*2;
writeln('Число = ',n);
readkey;
end.
Исходники программ - http:\\www.kort.3dn.ru
KORT вне форума Ответить с цитированием
Старый 24.11.2011, 11:27   #4
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

KORT, я так понимаю ТС не это просил
Но все же, ему это лучше знать
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 24.11.2011, 11:38   #5
gylayko
Форумчанин
 
Регистрация: 14.09.2011
Сообщений: 203
По умолчанию

Мне нужно 1.сгенерировать или ввести число больше 3 млд в строке 2.перевести строку в число 3.число умножить на 2 и вывести результат
но как перевести строку в число, допустим я введу с клавиатуры число больше 3 млд, а дальше?
gylayko вне форума Ответить с цитированием
Старый 24.11.2011, 11:40   #6
IT-man
АльTRUEи$т
Форумчанин
 
Аватар для IT-man
 
Регистрация: 19.03.2009
Сообщений: 784
По умолчанию

Цитата:
Мне нужно
читаем внимательно
Цитата:
Сообщение от Zer0 Посмотреть сообщение
работать с числом как с массивом цифр, поищите по форуму "Длинная арифметика"
Цитата:
«Никто не войдет в Рай, имея хотя бы крупицу гордыни в своем сердце». «Аллах Красив и любит красоту. Гордыня означает отказ от истины и высокомерие»
IT-man вне форума Ответить с цитированием
Старый 24.11.2011, 11:48   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

gylayko
во-первых, Вы же просили число более 3 миллионов, уже более 3-х миллиардов откудато взялось..

во-вторых, ответ Вам был дан в пост #2

в-третьих, Вы ошибаетесь, когда говорите
Цитата:
перевести строку в число
задача как раз в том и состоит, что нет типов данных, способных вместить целое число длиной, скажем 50 десятичных знаков.

а решить задачу ОЧЕНЬ просто. Рассматривайте строку как МАССИВ цифр.
Справа налево умножайте каждую отдельную цифру на ДВА. Учитывайте возникающий при этом перенос. Записывайте полученные цифры.
Умножение в столбик в начальной школе учились делать? Вот таким же образом и поступайте..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.11.2011, 11:58   #8
IT-man
АльTRUEи$т
Форумчанин
 
Аватар для IT-man
 
Регистрация: 19.03.2009
Сообщений: 784
По умолчанию

Код:
const Max= 100000;
function DigitInChar(i:byte):char;
begin
 DigitInChar:=chr(ord('0')+i);
end;
function CharInDigit(i:char):byte;
begin
 CharInDigit:=abs(ord('0')-ord(i));
end;
var s:string;
a,res:array[0..Max] of byte;
i,n,k:integer;
buf:integer;
begin
buf:=0;
Readln(s);
n:=length(s);
for i:=1 to n do
a[i]:=CharInDigit(s[i]);
for i:=1 to n+1 do
res[i]:=0;
for i:=n downto 1 do
begin
buf:=a[i]*2;
res[i]:=res[i]+buf mod 10;
res[i-1]:=buf div 10;
end;
if res[0]<>0 then k:=0 else k:=1;
s:='';
for i:=k to n do
s:=s+DigitInChar(res[i]);
writeln(s);
readln;
end.
результат(проверено виндовым калькулятором)
Цитата:
1234567890123456789
2469135780246913578
P.S. Оптимизации никакой)
Цитата:
«Никто не войдет в Рай, имея хотя бы крупицу гордыни в своем сердце». «Аллах Красив и любит красоту. Гордыня означает отказ от истины и высокомерие»

Последний раз редактировалось IT-man; 24.11.2011 в 12:04.
IT-man вне форума Ответить с цитированием
Старый 24.11.2011, 13:16   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

и, хотя я публикую свой пост после ответа уважаемого IT-man


но пусть в теме будет два варианта (хоть они и одинаковые по сути) для решения исходной задачи...

Код:
var S : string;
 i, One, Perenos :  integer;
begin
 WriteLn('Введите число:');
 Readln(s);

   {проверим, что ввели КОРРЕКТНОЕ число}
   for i:=1 to Length(s) do
     if Not (s[i] in ['0'..'9']) then begin
       WriteLn('Должны быть только цифры!');
       Readln;
       Halt(100);
     end;

  {умножим на 2 справа налево}
  Perenos:= 0;
  for i:=Length(s) downto 1 do begin
    One := ord(s[i])-ord('0');
    One := One * 2 + Perenos;
    Perenos := One div 10;
    s[i] := chr( (One mod 10) + ord('0'));
  end;

 if Perenos>0 then
    s:= chr( Perenos + ord('0')) + s;

 WriteLn(s);
       
 Readln;
end.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача со строками. (C++) malisheshka Помощь студентам 6 22.11.2011 23:25
Задача в С++ со строками Алексей6565 Visual C++ 0 21.05.2011 21:01
задача со строками Цветик Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 13.10.2010 16:53
Задача со строками Klyan Общие вопросы C/C++ 6 21.09.2007 22:22