Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
Василий-Робот
TECHNO
28 / 28 / 8
Регистрация: 04.11.2009
Сообщений: 366
1

Сложение чисел в системе счисления с основанием P

02.12.2009, 21:36. Просмотров 3687. Ответов 7

Вводятся два натуральных числа N1 u N2, а также число P (1<P<10). Считаем, что N1 u N2 - это числа счисления с основанием P. Требуется найти сумму чисел N1 u N2, не переводя их в десятичную систему счисления.

Если представить последнюю цифру первого числа как А, последнюю цифру второго числа как B, сумму А и В как С, то можно считать, что если С-P>P, то мы отнимаем P и кидаем единицу дальше, если нет, то просто записываем число...

Добавлено через 20 минут
Неужели эта задача такая трудная?

Добавлено через 39 минут
Один товарищ мне подсказал
"Переводишь их в строки командой IntToStr() И как при сложении столбиком начиная с конца складываешь символы, предварительно переведя их в числа командой StrToInt().
Алгоритм полностью писать не буду, ибо это долго и сложно)"

как переводить числа в строки командой IntToStr()?
дайте код пожалуйста
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2009, 21:36
Ответы с готовыми решениями:

Написать программу, которая находит разность двух чисел в системе счисления с основанием N
Даны два числа в системе счисления с основанием n. Написать программу, которая находит разность...

Сложение чисел в 2-ой системе счисления (переменные типа string)
Народ, помогите с лабой. Буду очень признателен:) 1. Разработать программу, выполняющую сложение...

Найти сумму цифр числа в системе счисления с основанием p
Help people!!!! Нужна программа в Паскале... Вот текст задачи.... Найти сумму цифр числа в системе...

Перевод числа X, заданного в системе счисления с основанием q в систему счисления с основанием p
Помогите, пожалуйста, разработать программу, выполняющую перевод действительного числа X заданного...

7
Inadequate
Retired
7715 / 2547 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
02.12.2009, 21:41 2
Цитата Сообщение от Василий-Робот Посмотреть сообщение
IntToStr
это не универсальная функция, в одном паскале она пойдет, а в другом не пойдет, для перевода из числа в строку надо использовать str. Вот вам справка для размышлений:
Str(x,s)
Str(x:n,s)
Str(x:n:m,s) процедура s - string, x - integer, real и n, m - integer преобразует x к строковому представлению (во втором и третьем случаях согласно формату вывода, устанавливаемому n и m) и записывает результат в строку s
0
Василий-Робот
TECHNO
28 / 28 / 8
Регистрация: 04.11.2009
Сообщений: 366
02.12.2009, 21:47  [ТС] 3


Добавлено через 3 минуты
непонятно
0
Inadequate
Retired
7715 / 2547 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
02.12.2009, 21:53 4
да уж... хорошо давайте попробуем зайти с такой стороны: что именно Вам не понятно?
0
Василий-Робот
TECHNO
28 / 28 / 8
Регистрация: 04.11.2009
Сообщений: 366
02.12.2009, 21:56  [ТС] 5
Хороший вопрос)
1) как переводить числа в строки командой Str (код, пожалуйста)
2) что это нам даст?
3) как начать цикл с конца числа? Мы будем для этого использовать операцию mod?
0
Inadequate
Retired
7715 / 2547 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
02.12.2009, 22:07 6
1:
Pascal
1
2
3
4
5
6
7
8
var
  i:integer;
  s:string;
begin
  readln(i);
  str(i,s);
  writeln(s)
end.
2:
нам это даст то же число, но только представленное в виде строки
3:
Если воспользоваться тем что я ниписал выше, то mod div на не нужны, достаточно пройти строку с последнего символа. Например так:
Pascal
1
2
3
...
for i:=length(s) to 1 do
...
А если не использовать строки в программе то да, нужно через div mod.
1
Василий-Робот
TECHNO
28 / 28 / 8
Регистрация: 04.11.2009
Сообщений: 366
02.12.2009, 22:11  [ТС] 7
Спасибо Inadequate
Осталось с этим только разобраться
0
APALoff
1641 / 1070 / 1081
Регистрация: 03.07.2013
Сообщений: 4,507
26.06.2014, 12:07 8
Реанимирую тему.
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
Const
  Raz=10;  { Разрядность вычислений }
  alphavit : array[0..35] of Char = ('0','1','2','3','4','5','6','7','8','9',
                                     'A','B','C','D','E','F','G','H','I','J',
                                     'K','L','M','N','O','P','Q','R','S','T',
                                     'U','V','W','X','Y','Z');
Var
  a,b : Longint;
 
Function NTC(N : Byte) : Char;
Begin
  If N in [0..35] then
    NTC:=alphavit[N];
End;
 
Function CTN(C : Char) : Byte;
Var ii : Byte;
Begin
  CTN:=0;
  For ii:=0 to 35 do
    If alphavit[ii]=C then
    Begin
      CTN:=ii;
      Break;
    End;
End;
 
Function IntToN(A : Longint) : String;
Var
  S : String;
  n : Longint;
Begin
  S:=''; n:=A;
  While n>0 do
  Begin
    S:=Chr(48+(n mod Raz))+S;
    n:=n div Raz;
  End;
  IntToN:=S;
End;
 
Function k10(k : Byte) : Longint;
Begin
  If k>0 then k10:=Raz*k10(k-1)
  else k10:=1;
End;
 
Function NToInt(S : String) : Longint;
Begin
  If Length(S)>1 then
    NToInt:=CTN(S[1])*k10(Length(S)-1)+NToInt(Copy(S,2,Length(S)-1))
  else
    NToInt:=CTN(S[1]);
End;
 
Function N1p(Var C : Char; cc : Char) : Char; {result  - перенос на следующий разряд}
Begin
  N1p:='0';
  If CTN(C)+CTN(cc)>Raz-1 then
  Begin
    N1p:='1';
    C:=NTC(CTN(C)+CTN(cc)-Raz);
  End
    else C:=NTC(CTN(C)+CTN(cc));
End;
 
Function NPlus(x1,x2 : String) : String;
Var A,B : String;
  k,k0 : Char;
  ii : Byte;
Begin
  k0:='0';
  If Length(x1)<Length(x2) then
  Begin
    A:='0'+x2; B:=x1;
  End
    else
    Begin
      A:='0'+x1; B:=x2;
    End;
  While Length(B)<Length(A) do B:='0'+B;
  For ii:=Length(A) downto 1 do
  Begin
    k:=N1p(A[ii],B[ii]);
    If N1p(A[ii],k0)<>'0' then k:='1';
    k0:=k;
  End;
  While A[1]='0' do Delete(A,1,1);
  NPlus:=A;
End;
 
Begin
{ Demo }
 { Writeln(k10(2));
  Writeln(IntToN(12345));
  Writeln(IntToN(NToInt('12345')));
  Writeln(NTC(35));
  Writeln(CTN('F'));}
  Writeln(NPlus('99','2'));
  Writeln(NPlus('8','3'));
  Writeln(NPlus('88888','2'));
{ /Demo }
End.
1
26.06.2014, 12:07
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2014, 12:07

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Напечатать таблицу умножения в системе счисления с основанием R
Число R принадлежит диапазону от 2 до 16 включительно. То есть нужна программа, в которую можно...

Найти сумму двух чисел в системе счисления с основанием N
Даны два числа в системе счисления с основанием N. Написать программу, которая находит сумму двух...

Число, заданное в системе счисления с основанием p перевести в систему с основанием q
Число, заданное в системе счисления с основанием p перевести в систему с основанием q

Сложение двух чисел в 6-ой системе счисления
Добрый день! Не могли бы вы мне помочь написать функцию, выполняющую сложение двух чисел в 6-ой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.