PTA 乙級 1017 A除以B (20 分) C/C++
本題要求計算 A / B,其中 A 是不超過 1000 位的正整數, B 是 1 位正整數。你需要輸出商數 Q 和餘數
輸入格式:
輸入在一行中依次給出 A 和 B,中間以 1 空格分隔。
輸出格式:
在一行中依次輸出 Q 和 R,中間以 1 空格分隔。
輸入樣例:
輸出樣例:
1 #include<stdio.h> 2 #include<string.h> 3 struct bign { 4int d[1010]; 5int len; 6bign() { 7memset(d, 0, sizeof(d)); 8len = 0; 9} 10 }; 11 bign change(char str[]) { // 將整數轉換為bign 12bign a; 13a.len = strlen(str); 14for(int i = 0; i < a.len; i++) { 15a.d[i] = str[i] - '0'; // 高位放進a的低位 16} 17return a; 18 } 19 20 void divide(bign a, int b, int& r) { //高精度除法,r為餘數 21bign c; 22c.len = a.len; 23for(int i = 0; i < a.len; i++) { //從高位開始 24r = r * 10 + a.d[i]; //和上一位遺留的餘數組合 25if( r < b ) c.d[i] = 0; //不夠除,該位為0 26else { //夠除 27c.d[i] = r / b; //商 28r = r % b; //獲得新的餘數 29} 30} 31int j = 0; 32for(int i = 0; i < c.len - 1 && c.d[i] == 0; i++) { 33j++; 34} 35 36// 遍歷輸出 37for(int i = j; i < c.len; i++) 38printf("%d", c.d[i]); 39printf(" %d", r); 40 } 41 42 int main() { 43char str[1010]; 44int b = 0, r = 0; 45scanf("%s%d", str, &b); 46bign a = change(str); //將a轉換為bign型 47divide(a, b, r); 48return 0; 49 }