2010年7月3日 星期六

Problem 10551 Basic Remains,進位餘數

此題給你三個數,一是進位制,二是被除數,三是除數。要你求出在此進位制的餘數為何。

首先將於除轉為 10 進制,讀入數值後,用一函式轉換:
#define SIZE 1000
char p[SIZE + 1], m[10], print[SIZE + 1];
int b, r;

int get10Basic()
{
int n = 0, i;
int len = strlen(m);
for (i = 0; i < len; i ++)
n = n * b + (m[i] - '0');
return n;
}

主程式內 ....
scanf("%s %s", p, m);
int len = strlen(p);
int i;
r = get10Basic();
最後只需將被除數從大到小一個一個讀入,每次讀入都要乘上進位制,再去和 r 取餘數,最後要轉回進位制印出。
int n = 0;
for (i = 0; i < len; i ++)
{
n *= b;
n += p[i] - '0';
n %= r;
}
printbBasic(n);
printbBasic 函式程式碼:
void printbBasic(int n)
{
int i = 0, j;
for ( ; n; n /= b)
print[i ++] = n % b;
if (i == 0) printf("0");
for (j = i - 1; j >= 0; j --)
printf("%c", print[j] + '0');
printf("\n");
}

By David.K

p10551題目連結
回ACM題庫目錄
回首頁

沒有留言: