2016-07-13 10 views
0

Постановка задачи -Как мне заставить эту программу работать для ввода> 10 для страниц ППИ?

Given a number base B (2 <= B <= 20 base 10), print all the integers N (1 <= N <= 300 base 10) such that the square of N is palindromic when expressed in base B; also print the value of that palindromic square. Use the letters 'A', 'B', and so on to represent the digits 10, 11, and so on. 

Print both the number and its square in base B. 

Входной формат

Одна линия с B, основание (указано в базе 10).

ОБРАЗЦА ВХОД

10 

ВЫХОД ФОРМАТ

Lines with two integers represented in base B. The first integer is the number whose square is palindromic; the second integer is the square itself. NOTE WELL THAT BOTH INTEGERS ARE IN BASE B! 

SAMPLE OUTPUT

1 1 
2 4 
3 9 
11 121 
22 484 
26 676 
101 10201 
111 12321 
121 14641 
202 40804 
212 44944 
264 69696 

Мой код работает для всех входов < = 10, однако, дает мне некоторые странные выход для входов > 10.

Мой код-

#include<iostream> 
#include<cstdio> 
#include<cmath> 

using namespace std; 

int baseToBase(int num, int base) //accepts a number in base 10 and the base to be converted into as arguments 
{         
    int result=0, temp=0, i=1; 

    while(num>0) 
    { 
     result = result + (num%base)*pow(10, i); 
     i++; 
     num = num/base; 
    } 

    result/=10; 
    return result; 
} 

long long int isPalin(int n, int base) //checks the palindrome 
{ 
    long long int result=0, temp, num=n*n, x=n*n; 

    num = baseToBase(num, base); 
    x = baseToBase(x, base); 

    while(num) 
    { 
     temp=num%10; 
     result = result*10 + temp; 
     num/=10;  
    } 

    if(x==result) 
     return x; 
    else 
     return 0; 
} 

int main() 
{  
    int base, i, temp; 
    long long int sq; 
    cin >> base; 

    for(i=1; i<=300; i++) 
    { 
     temp=baseToBase(i, base); 
     sq=isPalin(i, base); 

     if(sq!=0) 
      cout << temp << " " << sq << endl; 
    } 

    return 0; 
} 

Для входа = 11, то ответ должен быть

1 1 
2 4 
3 9 
6 33 
11 121 
22 484 
24 565 
66 3993 
77 5335 
101 10201 
111 12321 
121 14641 
202 40804 
212 44944 
234 53535 

Хотя мой ответ

1 1 
2 4 
3 9 
6 33 
11 121 
22 484 
24 565 
66 3993 
77 5335 
110 10901 
101 10201 
111 12321 
121 14641 
209 40304 
202 40804 
212 44944 
227 50205 
234 53535 

Существует разница в мой вывод и требуется один как 202 показывает под 209, а 110 отображается до 101.

Помогите оценить, спасибо!

+0

У вас есть проблема? здесь вы печатаете значение temp, означающее значение после преобразования в базу 'B'. И ваше базовое преобразование неверно, я думаю, причина для 'i = 240', ваша рассчитанная темп 209, а для i = 244 temp - 202 для' B = 11'. поэтому он печатает 209 сначала 202. –

ответ

0

простой пример для B = 11, чтобы показать ошибку в базовую конверсии для i = 10 темпа должен быть A, но ваш код вычисляет temp = 10. Причина в том, что у нас есть только 10 символов 0-9, чтобы отлично показать каждое число в базе 10 или ниже, но для баз больше, чем вам нужно использовать другие символы для представления другой цифры, такой как 'A', 'B' and so on. в описании проблемы четко указано, что. Надеюсь, теперь вы сможете исправить свой код, изменив функцию int baseToBase(int num, int base).