PTA 乙級 1017 A除以B (20 分) C/C++


1017 A除以B (20 分)

本題要求計算 A/B,其中 A 是不超過 1000 位的正整數,B 是 1 位正整數。你需要輸出商數 Q 和余數 R,使得 A=B×Q+R 成立。

輸入格式:

輸入在一行中依次給出 A 和 B,中間以 1 空格分隔。

輸出格式:

在一行中依次輸出 Q 和 R,中間以 1 空格分隔。

輸入樣例:

123456789050987654321 7 

輸出樣例:

17636684150141093474 3

 1 #include<stdio.h>  2 #include<string.h>  3 struct bign {  4 int d[1010];  5 int len;  6  bign() {  7 memset(d, 0, sizeof(d));  8 len = 0;  9  } 10 }; 11 bign change(char str[]) { // 將整數轉換為bign 12  bign a; 13 a.len = strlen(str); 14 for(int i = 0; i < a.len; i++) { 15 a.d[i] = str[i] - '0'; // 高位放進a的低位 16  } 17 return a; 18 } 19 20 void divide(bign a, int b, int& r) { //高精度除法,r為余數 21  bign c; 22 c.len = a.len; 23 for(int i = 0; i < a.len; i++) { //從高位開始 24 r = r * 10 + a.d[i]; //和上一位遺留的余數組合 25 if( r < b ) c.d[i] = 0; //不夠除,該位為0 26 else { //夠除 27 c.d[i] = r / b; // 28 r = r % b; //獲得新的余數 29  } 30  } 31 int j = 0; 32 for(int i = 0; i < c.len - 1 && c.d[i] == 0; i++) { 33 j++; 34  } 35 36 // 遍歷輸出 37 for(int i = j; i < c.len; i++) 38 printf("%d", c.d[i]); 39 printf(" %d", r); 40 } 41 42 int main() { 43 char str[1010]; 44 int b = 0, r = 0; 45 scanf("%s%d", str, &b); 46 bign a = change(str); //將a轉換為bign型 47  divide(a, b, r); 48 return 0; 49 }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM