Поясню, как выполнять сложение в восьмеричной системе счисления (8 с/с). Основание 8 с/с - число 8 - на 2 меньше основания привычной нам десятичной системы. Вследствие этого, в 8 с/с мы переходим к следующему разряду (от единиц к десяткам, от десятков к сотням и т.д.) НА ДВА РАНЬШЕ (потому что, как написано выше, 10-8=2), чем в десятичной.
Что это означает практически? Это означает, что любое число, большее или равное 8, в 8 с/с должно быть УВЕЛИЧЕНО НА 2. Т.е. 2+7 равно не 9, а 9+2=11, 3+9 равно не 12, а 14 и т.п.
Вернемся к исходному примеру. Начинаем с единиц. 2+1=3. Ничего не меняем, пишем 3. 3+7=10, больше 8, поэтому прибавляем 2 и получаем 12. Пишем двойку, а единицу, как обычно при сложении "в столбик", переносим в следующий разряд. 6+5=11, больше 8, прибавляем 2 и получаем 13. Плюс единица, пришедшая из предыдущего разряда, итого 14. 4 пишем, единицу - в следующий разряд. 5+1=6, плюс единица от переноса, итого 7. Меньше 8, поэтому так и пишем. И последнее, 4+2=6, меньше 8, записываем 6. Пример решен.
var a,n,i,j,s:integer; begin writeln('Введите количество цифр в числе'); readln(n); for i:=1 to n do begin writeln('Введите ',i,' цифру из ',n); readln(a); for j:=1 to n-i do a:=a*10; s:=s+a; end; writeln('Натуральное число: ',s); end.
Тестовое решение
Введите количество цифр в числе 5 Введите 1 цифру из 5 9 Введите 2 цифру из 5 2 Введите 3 цифру из 5 7 Введите 4 цифру из 5 3 Введите 5 цифру из 5 1 Натуральное число: 92731
Решение №2 Если очень надо использовать массив (хотя на мой взгляд совсем не нужно)
//PascalABC.NET (версия 3.1, сборка 1198) var a,n,i,j,s:integer; mas:array[1..10]of integer; begin writeln('Введите количество цифр в числе'); readln(n); for i:=1 to n do begin writeln('Введите ',i,' цифру из ',n); readln(mas[i]); a:=mas[i]; for j:=1 to n-i do a:=a*10; s:=s+a; end; writeln('Натуральное число: ',s); end.
Тестовое решение
Введите количество цифр в числе 5 Введите 1 цифру из 5 5 Введите 2 цифру из 5 4 Введите 3 цифру из 5 3 Введите 4 цифру из 5 2 Введите 5 цифру из 5 2 Натуральное число: 54322