Консультация № 159869
07.02.2009, 17:18
0.00 руб.
0 2 1
Здравствуйте!
У меня тут ещё 2 задачи с длинной арифметикой...
Пожалуйста помогите решить!

1 Вопрос:

A / B


Требуется получить точное значение частного А/В для двух натуральных чисел A и B.

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

В единственной строке входного файла INPUT.TXT записано частное двух натуральных чисел, не превышающих 1000. Числа разделены символом «/» без лишних пробелов.

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

В выходной файл OUTPUT.TXT нужно вывести точное значение A/B без лишних точек, нулей и пробелов. В случае присутствия бесконечной записи числа следует вывести период в скобках.

Например, неправильно выведены числа: 08.92, 3.20, 120.6(6), 0.(33), 5.(0), 2. , .3, 0.33(03) . Их следует выводить как 8.92, 3.2, 120.(6), 0.(3), 5, 2, 0.3, 0.3(30) .

Пример:
1.
input.txt:10/7
output.txt: 1.(428571)

2.
input.txt: 1/3
output.txt: 0.(3)

3.
input.txt: 100/25
output.txt: 4

2 Вопрос:

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


СПАСИБО!!!

Обсуждение

Неизвестный
07.02.2009, 18:17
общий
это ответ
Здравствуйте, Talan Biroev !
Решение 1й задачи. Что касается 2й то подозреваю что числа не превышают 10^1000, а не 101000. Иначе длинная арифметика не нужна.

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

using namespace std;

int main()
{
ifstream in("INPUT.TXT");
ofstream out("OUTPUT.TXT");
string str,Astr,Bstr;
getline(in,str);
in.close();
unsigned int pos=str.find('/',0);
Astr=str.substr(0,pos);
Bstr=str.substr(pos+1);
unsigned int A,B;
A=atoi(Astr.c_str());
B=atoi(Bstr.c_str());
vector<unsigned int> mods,nums;
out<<A/B;
if(A=A%B)
{
out<<".";
while((find(mods.begin(),mods.end(),A)==mods.end())&&A)
{
mods.push_back(A);
A*=10;
nums.push_back(A/B);
A=A%B;
}
for(unsigned int i=0;i<nums.size();i++)
{
if(A==mods[i])out<<"(";
out<<nums[i];
}
if(A)out<<")";
}
out<<endl;
out.close();
return 0;
}
Неизвестный
07.02.2009, 23:45
общий
Реализацию операций с длинными числами можно посмотреть здесь.
Форма ответа