入門篇(1)- 進位制轉換
阿新 • • 發佈:2020-07-15
p進位制轉q進位制
思路:先把p進位制數x轉換為10進位制數y,再利用輾轉相除法把10進位制數y轉化為q進位制數,用陣列z儲存q進位制數的每一位。
#include<cstdio> int main() { //8進位制數342轉2進位制 char str[20] = "342 8 2"; int x, p, q; sscanf(str, "%d %d %d", &x, &p, &q); //p進位制轉x10進位制y int product = 1, y = 0; while(x) { y += (x%10)*product; product *= p; x /= 10; } printf("%d\n", y); //十進位制數y轉q進位制數 int z[40], num = 0; do { z[num++] = y%q; y /= q; } while(y); for(int i = num-1; i >= 0; i--) printf("%d", z[i]); return 0; }
pat B1022 D進位制的A+B
題目描述
輸入兩個非負10進位制整數A和B(<=2^30-1)以及D(進位制數),輸出A+B的D(1<D<=10)進位制數。
輸入格式:
在一行一次給出三個整數A、B和D。
輸出格式:
A+B的D進位制數。
樣例輸入:
123 456 8
樣例輸出:
1103
思路:
先計算A+B的值,再十進位制直接轉D進位制(輾轉相除法)。
程式碼:
#include<cstdio> int main() { int a, b, d; scanf("%d %d %d", &a, &b, &d); int sum = a + b; int z[40]; int num = 0; //do while可以避免sum==0的衝突 do { z[num++] = sum%d; sum /= d; } while(num); for(int i = num-1; i >= 0; i--) printf("%d", z[i]); return 0; }