Страница 1 из 2

C++ задачка.

Добавлено: 25 ноя 2008, 10:28
lnter
Задачка:
Дано натуральное число n и натуральные числа а1, а2, аn (n < 100). Переделать все данные числа так, чтобы цыфры были записаны в обратном порядке (например, на месте 234 - 432, 100 - 1 итд.) В решении использовать функцию, которая дынному числу возврощает обратное число, расчеты вести численные!
Заранее, большое спасибо! ;)

Re: C++ задачка.

Добавлено: 25 ноя 2008, 13:07
StarWorm
За умеренную плату решу задачу
3 восемь 2 шесть 6 шесть 6 семь 1 - обращайся

Re: C++ задачка.

Добавлено: 25 ноя 2008, 13:55
crazy_blu
Функция типа ??

Код: Выделить всё

unsigned reverseDigit( unsigned src )
{
  unsigned dst = 0;

  while( src )
  {
    dst = dst*10 + src%10;
    src /= 10;
  }
  return dst;
}

Re: C++ задачка.

Добавлено: 25 ноя 2008, 19:13
Хыиуду
"А бабой был бы краше!". В смысле - со строкой было бы проще.

Re: C++ задачка.

Добавлено: 29 ноя 2008, 19:52
Albor

Код: Выделить всё

 
#include"iostream"
#include "algorithm"
#include "math.h"
using namespace std;
unsigned int reverseNumber(const unsigned int uNum)
{
int por=log10(uNum)+1;// кол-во цифр в числе
char *buffer=new char[por+1];// размер буфера на 1 больше для завершающего нуля
itoa(uNum,buffer,10);// 10 - это десятичная система счисления
reverse(buffer,buffer+por);//реверсируем содержимое буфера
unsigned int result=atoi(buffer);// преобразуем в число
delete[] buffer;// уничтожаем буфер
return result;// возвращаем результат
}
void showArray( unsigned int const * pArray, const int size)
{
for(int i=0; i<size;i++) cout<<*(pArray+i)<<" ";
cout<<endl;
}
void main()
{ 
int n;// количество чисел
unsigned int num;// вспомогательная переменная
unsigned int * NumArray;
unsigned int * ResultArray;
cout<<"Enter quantity of numbers ";
cin>>n;
NumArray=new unsigned int[n];// создаём массив для хранения исходных чисел
ResultArray=new unsigned int[n];// создаём массив для хранения перевёрнутых чисел
//вводим числа и заполняем исходный массив
for(int i=0;i<n;i++)
{
cout<<"Number "<<i<<"\t";
cin>>num;
NumArray[i]=num;
ResultArray[i]=reverseNumber(num);
cout<<endl;
}
cout<<"Initial Array: ";
showArray(NumArray,n);
 
cout<<"Result Array: ";
showArray(ResultArray,n);
delete[] NumArray;
delete[] ResultArray;
 
} 
Например, такой вариант решения задачи. Проверку на правильность вводимых данных - это уж самостоятельно.

Re: C++ задачка.

Добавлено: 30 ноя 2008, 17:28
Хыиуду
Ааа, так тут подразумевается "Инвертировать 100значное число, цифры которого записаны в массиве"?

for (int i=0; i<N/2; i++)
{A+=A[N-1-i]; A[N-1-i]=A-A[N-1-i]; A-=A[N-1-i]; }

C++, функции

Добавлено: 02 дек 2008, 00:55
lnter
Помогите, пожалуйста!
Какой будет код у функции, которая переворачивает число? (например из 765 делает 567)
Спасибо.

Re: C++ задачка.

Добавлено: 02 дек 2008, 01:57
Naeel Maqsudov
lnter, я перенес Ваш вопрос сюда, так как тут Вам на него уже ответили раньше, неоднократно.

Re: C++ задачка.

Добавлено: 03 дек 2008, 20:53
jogik
Помогите написать программу в Delphi (процедуры)!?
Описать процедуру SumDigit(N,S),находящую сумму цифр S целого числа N (N-входной,S-выходной параметр).Используя это процедуру,найти суммы цифр пяти данных чисел.

Re: C++ задачка.

Добавлено: 05 дек 2008, 00:06
lnter
#include <iostream>
#include <conio.h>
using namespace std;
//āīēāедеķčе ā ńņеļеķь
int pow10(int num){
int z = 1;
for(int i = 0; i < num-1; i++) z*=10;
return z;
}
//skaitla parveidojums
int perevorot(int x){
char string[25];
itoa(x, string, 10);
int i = strlen(string); // skaitla garums
int dev = 0;
//
while(x%10 != 0){
dev += (x%10) * pow10(i);
i--;
x/=10;
}
return dev;
}
int main () {
int n, a;
char beigt;
do { cout << "ievadiet, cik skaitlu jus velaties apgriezt:" << endl;
cin >> n;
if (n <= 0) cout << "nav naturals skaitlis" << endl;
for (int i = 0; i < n; i++) {
cout << "ievadiet skaitli, kuru jus velaties apgriezt:" << endl;
cin >> a;
if (a <= 0) { cout << "nav naturals skaitlis" << endl;
break; }
a = perevorot (a);
cout << "apgrieztais skaitlis:" << ' ' << a << endl;
}
cout << "lai programu pildit velreiz jaaievada \"Y\" vai \"y\"\n\n"; //uz ekrana izdrukas teksts "lai programu pildit velreiz jaaievada "Y" vai "y"
beigt = getch();

}
while (beigt =='Y'||beigt =='y');
cin.get(); //nospiediet ENTER
system ("pause");
return 0;
}

Помогите, пожалуйста!
Как добиться того, чтобы функция из 100, делала 1, а не 0... =(
Спасибо большое!