1017 A除以B (20)(20 分)
本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。
输入格式:
输入在1行中依次给出A和B,中间以1空格分隔。
输出格式:
在1行中依次输出Q和R,中间以1空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
解析
挺好的题,大整数运算。大整数必须用字符串输入和存储。注意字符数字和数字。比如‘0’和0。
思考下你小学是怎么计算除法的,把思路翻译成程序,就行了。
完整代码:
#include<stdio.h>
#include<string.h>
int main()
{
char numlist[1001];
int B=0;
char Q[1001];
int R=0;
scanf("%s %d",numlist,&B);
int length = strlen(numlist);
int bit=0;
int num=0;
int i=0;
int j=0;
for(; i<(length-1) ;i++){
num = numlist[i]-'0'+bit*10;
if(num<B){
bit=num;
if(i != 0)
Q[j++]='0';
}
else{
Q[j++]= num/B+'0';
bit=num%B;
}
}
num = numlist[i]-'0'+bit*10;
Q[j++]=num/B+'0';
R=num%B;
Q[j]='\0';
printf("%s %d",Q,R);
return 0;
}