天天看點

1017. A除以B (20)--PAT乙級 1017. A除以B (20)

1017. A除以B (20)

時間限制 100 ms

記憶體限制 65536 kB

代碼長度限制 8000 B

判題程式 Standard 作者 CHEN, Yue

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

輸入格式:

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

輸出格式:

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

輸入樣例:

123456789050987654321 7
      

輸出樣例:

17636684150141093474 3      
分析:字元串模拟除法      
代碼:      
/*高精度除低精度求商模闆*/
/*大數除法 ------除數為int範圍*/
#include<iostream>
#include<cstring> 
#include<string>
using namespace std;
const int N=1000+50;
void division(char * src, int n)
{
    int len = strlen(src), i, k, t = 0, s = 0;
    char dest[N]={'0'};//商 
    bool flag = true;    //商是否有了第一個有效位,防止商首部一直出現0    
    for(i = 0, k = 0; i < len; i++)
    {
        t = s * 10 + (src[i] - '0');    //新餘數
        if(t / n > 0)        //餘數為0要修改商
        {
            dest[k++] = t / n + '0';
			s = t % n;
			flag = false;
        }
       else                    //不夠除,修改餘數
        {
            s = t;
            if(!flag)            //商已經有有效位了,補零
                dest[k++] = '0';
        }
    }
    if(dest[0] == '0')//商為0 
	{
		k++;
	}
    dest[k] = '\0';
    printf("%s %d\n", dest, s);
}
int main()
{
  char num[N];//被除數 
  int n;//除數 
  scanf("%s%d", num, &n);
  division(num, n);
}