Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Севак
любитель покушать
681 / 632 / 106
Регистрация: 25.09.2011
Сообщений: 1,313
#1

Перевод кода с Java - C++

06.07.2013, 20:46. Просмотров 1214. Ответов 28
Метки нет (Все метки)

Здравствуйте! Есть код на java, который работает недостаточно быстро, для его ускорения решил переписать его на c++, вот что вышло, помогите исправить реализацию на c++ или укажите на ошибки, буду благодарен!

Java
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
import java.math.BigInteger;
import java.util.Scanner;
 
public class Main {
    public static final BigInteger one = BigInteger.ONE;
    public static final BigInteger minusOne = BigInteger.valueOf(-1);
    public static final BigInteger two = BigInteger.valueOf(2);
    public static final BigInteger three = BigInteger.valueOf(3);
    public static final BigInteger mod = BigInteger.valueOf(1000000007);
 
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        System.out.println(G(n));
    }
 
    public static BigInteger G(int n) {
        if(n % 2 == 0) {
            return two.shiftLeft(n).add(one).divide(three).mod(mod).subtract(one);
        } else {
            return two.shiftLeft(n).add(minusOne).divide(three).mod(mod);
        }
    }
 
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <stdint.h>
#include <math.h>
 
using namespace std;
 
int64_t G(int64_t n, int64_t mod) {
    if(n % 2 == 0) {
        return (((2 << n) + 1)/3) % mod - 1;
    } else {
        return (((2 << n) - 1)/3) % mod;
    }
}
 
 
int main() {
    int64_t n;
    int64_t mod = 1000000007;
 
    cin >> n;
    cout << G(n, mod);
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2013, 20:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перевод кода с Java (C++):

Перевод кода с Java на С++ - C++
Помогите перевести следующий код с Java на C++: * Вызывающий класс*/ public class Main{ public static void main(String args){ ...

Перевод кода с Java на С++ - C++
Такой вот код нужно перевести. import java.io.*; import java.math.BigInteger; import java.util.*; public class Main { /** *...

Перевод кода из java в С++ - C++
Делаю попытку создать хоть какую то стратегию http://russianaicup.ru/post/2#comment-926 ,помогите перевести код на с++. Или хотя бы как...

Перевод кода с Java на С++ - C++
Помогите перевести следующий код с Java на C++: import java.io.File; import java.io.IOException; import java.util.Scanner; ...

Перевод кода с Java - C++
Здравствуйте! Есть кусок кода на java, в котором идет работа с map, пробовал переписать самостоятельно, но ничего хорошего из этого не...

Перевод кода - C++
Переведите пжалуйста код на паскаль #include&lt;iostream&gt; #include&lt;string&gt; using namespace std; unsigned long long res=1; int n,len;...

28
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
06.07.2013, 20:47 #2
Это ж одно и тоже, нет?
0
Севак
любитель покушать
681 / 632 / 106
Регистрация: 25.09.2011
Сообщений: 1,313
06.07.2013, 20:48  [ТС] #3
p.s.: 1 <= n <= 1_000_000_000
в реализации c++ на больших числах выдает 0

Добавлено через 26 секунд
Dani, я знаю, но работает некорректно
0
Dani
06.07.2013, 20:52
  #4

Не по теме:

Цитата Сообщение от Севак Посмотреть сообщение
Dani, я знаю, но работает некорректно
нет, здесь был один и тот же код на Java и там и там.

0
Севак
любитель покушать
681 / 632 / 106
Регистрация: 25.09.2011
Сообщений: 1,313
06.07.2013, 20:53  [ТС] #5
Dani,

Не по теме:

сначала нечаянно не то вставил

0
Thinker
Эксперт С++
4227 / 2201 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
06.07.2013, 21:14 #6
Цитата Сообщение от Севак Посмотреть сообщение
p.s.: 1 <= n <= 1_000_000_000
в реализации c++ на больших числах выдает 0
так и должно быть, http://www.cyberforum.ru/cgi-bin/latex.cgi?2^{1\,000\,000\,000} ни в один тип данных не влезет, вот и получаете нули, n не может превышать значения 62, так как там еще 2-ка есть
1
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
06.07.2013, 21:15 #7
Цитата Сообщение от Севак Посмотреть сообщение
p.s.: 1 <= n <= 1_000_000_000
С помощью int64 2109 конечно не представишь
1
Севак
любитель покушать
681 / 632 / 106
Регистрация: 25.09.2011
Сообщений: 1,313
06.07.2013, 21:18  [ТС] #8
Всем спасибо, буду думать дальше!
0
Belfegor
06.07.2013, 21:20
  #9

Не по теме:

в с++ нет готового типа, надо писать с длинной арифметикой

0
Thinker
Эксперт С++
4227 / 2201 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
06.07.2013, 21:24 #10
да, только длинная арифметика должна быть очень продуманной, а то возникнет такая же проблема, как здесь
Возведение двойки в миллиардную степень
1
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
06.07.2013, 21:27 #11
Тут явно: обычная длинка + двоичное возведение в степень

Добавлено через 1 минуту
Возведение в степень будет за логарифм, итого 31 перемножение.
1
Thinker
Эксперт С++
4227 / 2201 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
06.07.2013, 21:30 #12
Цитата Сообщение от Dani Посмотреть сообщение
Возведение в степень будет за логарифм, итого 31 перемножение.

Не по теме:

это все понятно, только в десятичный вид перевести все это не так просто. это для задачи из другой ветки

1
Севак
любитель покушать
681 / 632 / 106
Регистрация: 25.09.2011
Сообщений: 1,313
06.07.2013, 21:32  [ТС] #13
насчет двоичного возведения в степень:
правильно ли я помню что 2^n == 1 и n нулей?
вот еще на что наткнулся
0
Thinker
Эксперт С++
4227 / 2201 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
06.07.2013, 21:33 #14
Цитата Сообщение от Севак Посмотреть сообщение
насчет двоичного возведения в степень:
правильно ли я помню что 2^n == 1 и n нулей?
правильно
1
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
06.07.2013, 21:35 #15
Thinker, что? переводить не нужно ничего.
1
06.07.2013, 21:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2013, 21:35
Привет! Вот еще темы с ответами:

Перевод кода в С - C++
Помогите, пожалуйста, перевести код: a = 0.99f; b = 1.f - a; Не знаю что это за язык и не могу понять значение f

Перевод кода - C++
Помогите пожалуйста перевести код с паскаля на си++. Пока получилось как-то так. #include &lt;iostream&gt; #include &lt;fstream&gt; #include...

перевод кода из С++ в С - C++
Кто может перевести код на С ,сделайте доброе дело.....Пожалуйста ;-) #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;time.h&gt; ...

Перевод кода с C# на С++ - C++
Есть код на C# нужно перевести на С++, помогите пожалуйста так как еще не свободно владею языками программирования. Буду очень благодарен. ...


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

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

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