1. 程式人生 > >另類進位制轉換

另類進位制轉換

題目描述

表示式6×9=42對於十進位制來說是錯誤的,但是對於十三進位制來說是正確的。即6(13)×9(13)=42(13),而42(13)=4×131+2×130=54(10)。你的任務是寫一段程式讀入3個整數p、q和r,然後確定一個進位制B(2≤B≤16)使得p×q=r。如果B有很多選擇,輸出最小的一個。例如:p=11,q=11,r=121。則有11(3) ×11(3)=121(3),11(10) ×11(10)=121(10)。這種情況下,輸出3。如果沒有合適的進位制,則輸出0。
 

輸入

一行,3個B進位制的正整數p、q、r(數位≤7)。

輸出

使得p×q=r成立的最小進位制B,如果沒有合適的進位制,則輸出0。
 

樣例輸入

6 9 42

樣例輸出

13
#include <stdio.h>


long convert(long v, int base)
{
    long ans, weight;
    int digit;

    ans = 0;
    weight = 1;
    while(v) 
   {
        digit = v % 10;
        v /= 10;
        if(digit >= base) 
	 {
            ans = -1;
            break;
        }
        ans += weight * digit;

        weight *= base;
    }

    return ans;
}

int main()
{
    long p, q, r;
    long p2, q2, r2;
    int ans=0;

    scanf("%ld%ld%ld", &p, &q, &r);
    
    for(int i=2; i<16; i++) 
   {
        p2 = convert(p, i);
      
        q2 = convert(q, i);
       
        r2 = convert(r, i); 

        if(p2 * q2 == r2) 
	{
            ans = i;
            break;
        }
    }

    printf("%d\n", ans);

    return 0;
}