Консультация № 160422
14.02.2009, 06:31
0.00 руб.
0 2 1
Здравствуйте, дорогие эксперты!
Мне очень нужно решить задачи по длинной арифметике!
Пожалуйста, помогите решить!

Первая задача:

Сумма произведений


Требуется вычислить сумму произведений цифр каждого N-значного числа. При этом следует учесть, что если в числе встречается цифра 0, то произведение его цифр равно нулю. Для N=3 искомая сумма представлена следующим рядом:

S = 1*0*0 + 1*0*1 + 1*0*2 + … + 9*9*8 + 9*9*9 = 91125

Входные данные:

В единственной строке входного файла INPUT.TXT записано натуральное число N (N < 1000).

Выходные данные:

В единственную строку выходного файла OUTPUT.TXT нужно вывести одно целое число — сумму произведений всех N-значных чисел.

Примеры:
1.
input.txt: 1
output.txt: 45
2.
input.txt:3
output.txt:91125
3.
input.txt:5
output.txt:184528125

Вторая задача:

A-B


Требуется найти разность между неотрицательными числами А и В.

Входные данные:

Во входном файле INPUT.TXT в двух строках записаны два неотрицательных целых числа A и B, не превышающие 101000.

Выходные данные:

В выходной файл OUTPUT.TXT выведите значение A-B.

Примеры:

1.
input.txt:
7
5
output.txt:2
2.
input.txt:
5
17
output.txt:-12

Третья задача:

Длинный корень


По заданному натуральному числу А требуется найти наибольшее число В такое, что B2 <= A.

Входные данные:

Во входном файле INPUT.TXT записано натуральное число A (A <= 103000).

Выходные данные:

В выходной файл OUTPUT.TXT выведите максимальное натуральное число B, квадрат которого не превосходит A. Число B следует выводить без лидирующих нулей.

Примеры:

input.txt: 17
output.txt: 4

Заранее СПАСИБО!!!!

Обсуждение

Неизвестный
14.02.2009, 10:30
общий
это ответ
Здравствуйте, Аршавин Александр Абрамович!
Решение 1й задачи:

Приложение:
#include <fstream>
#include <string>
#include <vector>

using namespace std;

class longnum
{
private:
typedef unsigned __int32 datatype;
typedef unsigned __int64 extdatatype;
typedef vector<datatype>::iterator itertype;
typedef vector<datatype>::reverse_iterator ritertype;
vector<datatype> _data;
static const datatype div=1000000000;
static const datatype num=9;
public:
longnum(datatype val=0)
{
_data.push_back(val);
}
longnum operator=(datatype val)
{
_data.clear();
_data.push_back(val);
return *this;
}
longnum operator*(datatype val)
{
longnum res(*this);
datatype carry=0;
for(itertype it=res._data.begin();it!=res._data.end();it++)
{
extdatatype tmp=static_cast<extdatatype>(*it)*val+carry;
*it=tmp%div;
carry=static_cast<datatype>(tmp/div);
}
if(carry)res._data.push_back(carry);
return res;
}
longnum operator*(longnum& val)
{
longnum res;
res._data.resize(_data.size()+val._data.size(),0);
for(itertype valit=val._data.begin();valit!=val._data.end();valit++)
{
vector<datatype> tmpdata(_data.size()+val._data.size(),0);
itertype tmpit=tmpdata.begin()+(valit-val._data.begin());
datatype carry=0;
extdatatype tmp;
for(itertype it=_data.begin();it!=_data.end();it++,tmpit++)
{
tmp=static_cast<extdatatype>(*it)**valit+carry;
*tmpit=tmp%div;
carry=static_cast<datatype>(tmp/div);
}
*tmpit=carry;
carry=0;
for(itertype tmpit=tmpdata.begin(),resit=res._data.begin();tmpit!=tmpdata.end();tmpit++,resit++)
{
tmp=static_cast<extdatatype>(*tmpit)+*resit+carry;
*resit=tmp%div;
carry=static_cast<datatype>(tmp/div);
}
}
return res;
}
friend ostream& operator<<(ostream& stream,longnum val);
};

ostream& operator<<(ostream& stream,longnum val)
{
bool f=false;
for(longnum::ritertype it=val._data.rbegin();it!=val._data.rend();it++)
{
if(!f)
{
if(*it)
{
f=true;
stream<<*it;
}
}
else
{
char buf[10];
_itoa(*it,buf,10);
string str=buf;
while(str.length()<longnum::num)str="0"+str;
stream<<str;
}
}
if(!f)stream<<"0";
return stream;
};

longnum calc(unsigned int N)
{
if(N)
{
if(N==1)return 45;
else
{
unsigned int t=N/2;
return calc(t)*calc(N-t);
}
}
else return 0;
}

int main()
{
unsigned int N;
ifstream in("INPUT.TXT");
ofstream out("OUTPUT.TXT");
in>>N;
out<<calc(N)<<endl;
return 0;
}
давно
Старший Модератор
17042
808
28.11.2016, 04:09
общий
Адресаты:
Вам сюда.
Во-первых, мини-форум предназначен для обсуждения уже заданного вопроса, а не для размещения новых.
Во-вторых, эта рассылка посвящена C / C++, а не Паскалю.
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
Форма ответа