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);
}